您可以在廣告請求中,以發布商提供的信號 (PPS) 的形式傳送目標對象和比對內容資料。透過 PPS,您可以使用使用者資料,透過標準分類方式,向所有交易類型的出價方傳達目標對象特徵,藉此改善程式輔助營利,而無須分享使用者 ID。您的目標對象特性包括行為和興趣相關資料 (IAB 目標對象分類 1.1) 和比對內容資料 (IAB 內容分類 2.2)。 您也可以傳送發布商提供的結構化信號,這些信號由 Google 定義,並允許傳送額外信號。
建構使用者信號 JSON
在頂層建立含有單一鍵/值組合的 JSON 物件。鍵應為 PublisherProvidedTaxonomySignals
,其值應為物件的陣列。陣列中的每個物件都應包含 2 個鍵/值組合:
taxonomy
鍵,可接受下列對應至下列 IAB 公開規格的值:IAB_AUDIENCE_1_1
(目標對象分類 1.1)IAB_CONTENT_2_2
代表內容分類 2.2
values
鍵和字串分類值的對應陣列。
建構結構化信號陣列
針對結構化信號,請新增包含物件陣列值的 PublisherProvidedStructuredSignals
鍵。根據下列信號鍵/值清單建構物件:
結構化信號表格的切換按鈕
信號 | <code" dir="ltr" translate="no">"type" Value</code"> | 可能的 "single_value" 值 |
可能的 "values" 值 |
---|---|---|---|
音訊動態饋給類型 | "audio_feed" |
|
不適用 |
內容分級 | "content_rating" |
|
不適用 |
內容上傳 | "delivery" |
不適用 |
|
製作品質 | "prodq" |
|
不適用 |
請參閱以下範例,如何使用 IAB_AUDIENCE_1_1
和 IAB_CONTENT_2_2
當做分類信號,並包含結構化信號。
const userSignals = {
"PublisherProvidedTaxonomySignals": [{
"taxonomy": "IAB_AUDIENCE_1_1",
"values": ["6", "284"]
// '6' = 'Demographic | Age Range | 30-34'
// '284' = 'Interest | Business and Finance | Mergers and Acquisitions'
},
{
"taxonomy": "IAB_CONTENT_2_2",
"values": ["49", "138"]
// '49' = 'Books and Literature | Poetry'
// '138' = 'Education | College Education | College Planning'
}],
"PublisherProvidedStructuredSignals": [{
"type": "audio_feed",
"single_value": "af_1",
},
{
"type": "delivery",
"values": ["cd_1", "cd_3"],
},
],
};
設定串流要求
請按照下列步驟,透過 StreamRequest
傳送 PPS:
- 建立 JSON 字串,內含使用者的興趣、行為或內容比對資料。
- 透過上方的 JSON 字串建立 Base64 編碼的 ASCII 字串。
- 使用
StreamRequest.setAdTagParameters
新增已編碼的 JSON。
JSONObject userSignalsObject = new JSONObject();
JSONArray userSignalsArray = new JSONArray();
JSONObject audienceTaxonomyObject = new JSONObject();
JSONArray valuesArray = new JSONArray();
valuesArray.put("1");
valuesArray.put("284");
try {
audienceTaxonomyObject.put("taxonomy", "IAB_AUDIENCE_1_1");
audienceTaxonomyObject.put("values", valuesArray);
} catch (JSONException e) {
e.printStackTrace();
}
userSignalsArray.put(audienceTaxonomyObject);
try {
userSignalsObject.put("PublisherProvidedTaxonomySignals", userSignalsArray);
} catch (JSONException e) {
e.printStackTrace();
}
byte[] userSignalsByte=new byte[0];
try {
userSignalsByte = userSignals.getBytes(StandardCharsets.UTF_8);
String encodedBas64Signals = android.util.Base64.encodeToString(
userSignalsByte,
android.util.Base64.URL_SAFE);
encodedSignals = URLEncoder.encode(encodedBas64Signals, "UTF-8");
} catch (java.io.UnsupportedEncodingException error) {
Log.w("Sample app", error);
}
Map<String, String> adTagParamMap = new java.util.HashMap<String, String>();
adTagParamMap.put("ppsj", encodedSignals);
streamRequest.setAdTagParameters(adTagParamMap)