您可以在广告请求中,将受众群体和情境数据作为发布商提供的信号 (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">"type" Value</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)