发布商提供的信号

您可以在广告请求中以发布商提供的信号 (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"
  • "af_1":音乐
  • "af_2":广播
  • "af_3":播客
不适用
内容分级 "content_rating"
  • "cr_1":G
  • "cr_2":PG
  • "cr_3":T
  • "cr_4":MA
不适用
内容传送 "delivery" 不适用
  • "cd_1":在线播放
  • "cd_2":渐进式
  • "cd_3":下载
制作质量 "prodq"
  • "pq_1":专业制作
  • "pq_2":产销合一者
  • "pq_3":用户原创 (UGC)
不适用

请参阅以下示例,其中对分类信号使用 IAB_AUDIENCE_1_1IAB_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)