您可以在广告请求中以发布商提供的信号 (PPS) 的形式发送受众群体和情境数据。借助 PPS,您可以通过使用标准类目将您的受众群体特征传达给所有交易类型的出价方,从而利用用户数据提高程序化变现能力,而无需分享用户标识符。您的受众群体特征可能包括行为和基于兴趣的数据(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">“类型”值</code"> | 可能的 "single_value" 值 |
可能的 "values" 值 |
---|---|---|---|
音频 Feed 类型 | "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)