Protected Audience 频次上限

频次上限是一项广告实践,用于限制在指定时间段内向用户展示特定类别广告的次数。频次上限可以保证广告展示的新鲜度和趣味性,从而改善最终用户体验,而且还有助于广告主管理广告支出。

此提案将介绍如何使用 Protected Audience on Android 以准确无误且保护隐私的方式实现频次上限功能。

Protected Audience 结合两项功能来实现频次上限功能:在设备端存储广告特定事件计数器数据,以及根据一组预定义的过滤策略来过滤广告。借助频次上限功能,广告主可以针对指定时间段内直方图值的总和设置计数器阈值。

计数器对于设备配置文件、广告技术平台和计数器键的每个组合都是唯一的。每个广告都应包含一组计数器键,以便在注册广告的观看或展示时使用。对于每个键,Protected Audience 会存储一组计数器,并且每个计数器都会记录在特定时间间隔内发生的所有广告特定事件。当发生展示或观看事件时,设备上的计数器会递增,并且计数器数据会在设备上持久保留。稍后会定义确切的保留时间。

Protected Audience 广告选择工作流程中的广告过滤逻辑可以访问计数器、再营销广告和内容相关广告,这让 Protected Audience 频次上限功能能够处理所有此类广告请求。

注意:广告过滤功能仅适用于 Privacy Sandbox on Android。目前,Chrome 的 Protected Audience 实现方案未实现任何机制来过滤采用内容相关定位的非 Protected Audience 广告。此提案仅涵盖买方支持。如有需要,我们以后会添加卖方支持。

Protected Audience 频次上限支持各种各样的要求,包括:

  • 当设备端计数器更新时,执行实时过滤,并尽可能减少服务器端延迟。
  • 灵活的键层次结构,包括单个广告、广告系列或任何其他分组。
  • 与其他频次上限方法一致,不依赖于 AdID。
  • 适用于指定设备用户个人资料的不同应用。
  • 准确且完整的计数器。
  • 支持对广告事件(例如观看或展示)进行自定义设置。
  • 一项功能可同时适用于再营销广告和内容相关广告。

如需设置频次上限,请按以下步骤操作:

第 1 步:为广告添加频次上限信息

内容相关广告和再营销广告会使用包含任意整数列表的 ad_counter_keys 字段来指明要在发生观看或展示事件时更新的相关直方图计数器。该字段未包含在不由 Protected Audience 解析的 metadata 字段中。

以下示例显示了 AdSelectionConfigadsData 字段的数据格式。对于再营销,指定自定义受众群体的广告列表中广告的格式与下例中显示的 ads 字段内容一致:

'adsData': [
  {
    "buyer": "ads.example.com",
    "ads": [
      {
        'render_url': 'exampleUrl',
        'metadata': {...},   /* metadata are opaque to Protected Audience are
                                required to be in valid JSON format */
        'ad_counter_keys': [1234, 5678]
      }]
  }]
}

第 2 步:注册观看或展示

广告技术平台可以调用 updateAdCounterHistogram 方法来注册频次上限涵盖的事件。可以对胜出广告的 eventType 中指定的键的同一事件重复调用该方法。

void updateAdCounterHistogram(@EventType eventType, long adSelectionId)

输入:

  • eventType标识事件是计为观看、展示、点击还是在广告选择流程中胜出。
  • adSelectionIdAdSelectionOutcome 对象中由 selectAds 调用返回的 ID 值。

updateAdCounterHistogram 调用会更新一组键的直方图,这些键被定义为由 CustomAudience 提取的再营销广告的一部分,或 selectAdsAdSelectionConfig 参数中包含的内容相关广告的一部分。

如果您假定第 1 步中的广告是 AdSelection 的胜出者且 id 值为 9999,则 updateAdCounterHistogram(FrequencyCapFilters.AD_EVENT_TYPE_VIEW, adSelectionId: 999) 调用将递增以下三个主键的计数器:

  • {'ads.example.com', 1234, VIEW}
  • {'ads.example.com', 5678, VIEW}

广告技术平台名称从买方字段获取,要么来自内容相关广告,要么来自自定义受众群体,具体取决于胜出广告的来源。

对于 selectAds API 调用所返回广告的事件类型 FrequencyCapFilters.AD_EVENT_TYPE_WIN,Protected Audience for Android 会自动递增所有上述计数器。这在功能上等同于在 Chrome 的 Protected Audience 实现方案中的 generateBid 中将 prev_wins 参数添加到 browser_signals

第 3 步:使用过滤条件实现频次上限过滤

为了获得最佳性能,频次上限过滤函数在 AdServices 中执行。Protected Audience 通过读取 AdsData 对象中的过滤条件字段来了解是否必须过滤消息。过滤条件列表在 frequency_cap 中指定。键 event_typeinterval_in_seconds 的值用于检索用于过滤和 Protected Audience 的事件的直方图。

您可为自定义受众群体提供的再营销广告以及作为 AdSelectionConfig 对象一部分的内容相关广告指定过滤信息。

对于具有频次上限过滤条件的内容相关广告,使用 AdSelectionConfig 对象中的广告字段传入广告。系统会对广告进行过滤,并且在 selectAds 调用的结果中返回出价最高的广告。

对于设置了频次上限过滤条件的再营销广告,系统会在调用买方提供的 generateBid() JavaScript 函数之前对广告进行过滤。

以下示例展示了包含频次上限过滤的消息:

{
  'render_url': 'url',
  'metadata': {...},   /* metadata are opaque to Protected Audience and assumed
                        to be in valid JSON format */

  'ad_counter_keys': [1234, 5678],

  "filters": {
    "frequency_cap": {
      "view": [
        {
          "ad_counter_key": 1234
          "max_count": 10,
          "interval_in_seconds": 86400
        },
        {
          "ad_counter_key": 5678
          "max_count": 10,
          "interval_in_seconds": 86400
        },
      ],
      "win": [
        {
          "ad_counter_key": 1234
          "max_count": 5,
          "interval_in_seconds": 604800
        },
        {
          "ad_counter_key": 5678
          "max_count": 5,
          "interval_in_seconds": 345600
        },
      ]
    },

  // This field is only required in contextual ads and is used in
  // reportImpression calls to fetch the reportWin function.
  'reportingJS': "https://ads.example.com?reportWin.js"
}

第 4 步:为胜出的广告生成报告

当广告选择流程完成后,它会返回一个包含 renderUriadSelectionId(这是 selectAds 调用的数字标识符)的 AdSelectionOutcome 对象。此 ID 可用于调用目前支持事件级报告的 reportImpression API。在 Beta 1 中,此方法支持为再营销广告生成报告,并且将在后续版本中扩展以支持为内容相关广告生成报告。对于内容相关广告,买方需要在广告结构中使用名为 reportingJS 的额外字段指明在 reportImpression 调用期间可以检索到 reportWin 函数的位置,如上例所示。

选择候选广告的最佳实践

Protected Audience 会将频次上限的执行从服务器移至设备。虽然胜出的出价是通过 Privacy Sandbox 进行报告的,但开发者并不知道广告未展示的原因。广告可能会因出价失败或频次上限而未展示。出价系统无法全面了解特定广告无法胜出的原因,因此需要执行额外的工作才能确保投放效果最佳的广告。这些最佳实践有助于确保使用 Protected Audience 实现最佳广告投放。

发送足够多的再营销广告

无法针对每位用户优化再营销广告。如果用户看到来自自定义受众群体的大量广告且广告限制很低,则所有广告都可能会被滤除。再营销广告会定期刷新,因此应有足够高的广告资源应用频次上限,确保继续投放再营销广告。这就需要确保广告尺寸限制的均衡性,广告尺寸限制可在 joinCustomAudience 调用和自定义受众群体每日更新期间指定。买方必须考虑出价阶段的延迟时间可能会增加。为了尽可能减少这些问题的影响,系统会在调用 generateBid 之前执行频次上限过滤。

在服务器上保留上下文计数器

通过服务器端估算,开发者可以粗略估算出频次上限何时可能处于启用状态。这些估算结果可能表明广告已达到频次上限阈值,因此应随更多候选广告一起发送或彻底删除。

在内容相关响应中发送多个候选广告

您应在发送 Protected Audience 竞价之前发送多个内容相关候选广告。这样可以确保即使过滤掉多个广告,其他广告仍然会展示。可以优先投放候选广告,以便将某些广告作为备用广告提供。

由于执行是有时间限制的,因此应根据广告在竞价中胜出的可能性来选择候选广告,并且这些广告不会被滤除。

限制

以下是 Protected Audience 频次上限的已知限制:

  1. Protected Audience 频次上限在设备用户配置文件级别运行,没有其他设备和其他配置文件的共享计数器。如果需要,可以手动整合在其他设备上显示的任何广告增量。
  2. 在设备上存储和访问设备计数器。需要单独管理服务器端计数器。
  3. 由于频次上限和相关广告过滤都将在设备上处理,因此广告技术平台无法直接控制这些操作。如需绕过设备的频次上限阈值,广告技术平台可以发送多个采用不同过滤条件的候选广告。
  4. 不支持基于已记录频次的出价调整。generateBid 函数无法查看频次计数器。