应用安装广告过滤

我们通常借由应用安装广告来提高新移动应用的安装量。若要最大限度地提升广告支出的投资回报率,最好不要向已安装某款应用的设备展示安装同一款应用的广告。在此提案中,我们将这种做法称为“应用安装广告过滤”。

此提案将介绍 Protected Audience on Android 如何支持以保护隐私的方式进行内容相关广告过滤,尤其是应用安装广告过滤。若要参与,设备上的应用必须明确选择启用应用安装广告过滤。在选择广告期间,系统会根据广告技术平台已知设备上已安装的应用的列表滤除候选广告。已安装的应用的列表仅在选择广告期间可见,并会依赖于买方平台的指示,根据该设备上已安装的某款应用滤除特定广告。

如需设置应用安装广告过滤,请按以下步骤操作:

第 1 步:注册应用以使用应用安装广告过滤功能

若要选择启用应用安装广告过滤,相关应用开发者需要使用广告技术买方 eTLD+1 列表,从其应用或广告技术 SDK 中调用 registerForAdFiltering 应用注册 API。这样一来,列表中的买方(仅限这些买方)便能根据应用的安装状态,直接或通过广告技术的 SDK 来过滤广告。通过注册,应用开发者可以完全控制其应用是否参与应用安装广告过滤。

void registerForAdFiltering(List<AdTechIdentifier> buyers);

第 2 步:请求过滤应用安装广告

在考虑对广告进行出价时,买家可以选择根据应用的安装状态来标记要过滤的广告。为此,买方需要在广告的元数据中添加应用的软件包名称。应用安装广告过滤请求是馈送给 Protected Audience 竞价流程的广告数据的一部分。此类广告数据的创建方式取决于该广告是内容相关广告还是再营销广告。

  • 对于内容相关广告用例(应用安装广告过滤的主要用例),过滤信息会包含在广告数据中,而买方在响应 Protected Audience 外收到的内容相关广告出价时,会向卖方提供这些数据。Protected Audience 会预期此过滤信息像其他广告专有的元数据一样,作为内容相关响应的一部分返回。
  • 对于再营销广告用例,Protected Audience 会预期过滤信息包含在自定义受众群体中。有 2 个时机可纳入这些信息:一是在加入受众群体时,二是在更新受众群体过程中提取新的受众群体数据时。

过滤应用安装广告的请求在 AdData JSON 对象中应如下所示:

{
  "render_uri": "https://..",
  "metadata": {..},
  "filters": {
    "app_install": {
       "app_package_names": ["app1.package", "app2.package"]
    }
  }
}

注意:您可以一次过滤多个应用的应用安装广告。若要实现此目的,您只需列出要评估的所有应用软件包的名称。只要任一软件包出现在应用安装列表中,相应广告就会被滤除。

我们正在探索如何对内容相关广告信息进行加密和/或签名,欢迎您就这一主题提出反馈

第 3 步:在广告选择过程中过滤应用安装广告

在广告请求过程中,买家可以将含有过滤信息的多个广告传回给卖家,以便系统过滤针对已安装应用的广告。卖方需要将过滤信息作为 selectAds 函数配置的一部分在 adData 字段中传递。Android 预期的消息格式与以下示例类似。

AdData myAdData = new AdData.Builder()
        .setRenderUri(Uri.parse("https://.."))
        .setMetadata("{...}")
        .setFilters(new AdFilters.Builder()
                .setAppInstalledFilter(new AppInstalledFilter.Builder()
                    .setPackageNames(ImmutableList.of("app1.package", "app2.package"))
                    .build())
                .build())
        .build();

AdSelectionConfig myAdSelectionConfig = new AdSelectionConfig.Builder()
    .setSeller(AdTechIdentifier.fromString("example-ssp1.com"))
    .setDecisionLogicUri(Uri.parse("https://..."))
    ...
    .setContextualAds(ImmutableList.of(new ContextualAd.Builder()
                      .setBuyer(AdTechIdentifier.fromString("example.com"))
                      .setReportingUri("https://example.com/reporting")
                      .setBid(20)
                      // myAdData could be taken from the JSON above
                      .setAd(myAdData)
                      .build()))
    .build();

// Invoke ad services API to initiate ad selection workflow.
selectAds(myAdSelectionConfig);

过滤操作在 selectAds API 中进行处理。如果消息中指定的应用与广告技术买方特定的应用安装列表中的应用相符,Protected Audience 会滤除该广告。可能会出现两种结果:

  • 应用未出现在列表中,意味着该应用未安装和打开。
  • 应用出现在列表中,意味着该应用已安装并打开。

如果 Protected Audience 检测到该应用已存在,则系统会从竞价用于运行 scoreAds 的广告列表中排除该广告。

涉及内容相关广告时的注意事项

借助应用安装广告过滤,Protected Audience API 可以开始支持内容相关广告过滤。如果竞价同时涉及内容相关广告和再营销广告或仅涉及内容相关广告,则需指定以下几个条件。

  • 进行 selectAd 竞价时,买方可以选择传入 ContextualAd 对象的列表。此类对象会包含广告买方的 eTLD+1、广告出价、指向广告报告逻辑的网址、包含实际广告内容网址的 AdData,以及属于相应买方的验证签名(如需了解详情,请参阅内容相关广告签名)。请注意,内容相关广告和再营销广告都会使用 AdData 格式。

  • 在竞价流程开始时,系统会根据 AdData.adFilters.appInstallFilters.packageNames 中包括的一组指定软件包名称来过滤内容相关广告和再营销广告。然后,系统会为所有再营销广告确定出价值,并使用提供的 scoreAds 函数对再营销广告和内容相关广告进行评分。得分最高的广告将胜出。请注意,即使没有再营销广告,此流程也会进行。

  • 如果内容相关广告赢得竞价,并且该应用触发了展示次数报告,则 Protected Audience 将从内容相关广告数据包含的报告网址下载并执行一个名为 reportWin() 的 JS 函数。这与再营销广告赢得竞价时生成报告的方式类似。

    JavaScript 报告函数示例:

    function reportWin(ad_selection_signals, per_buyer_signals, signals_for_buyer,
    contextual_signals) {
    let reporting_address = 'https://reporting.example.com';
    return {'status': 0, 'results': {'reporting_uri':
         reporting_address + '?some_signal=' + per_buyer_signals.some_signal} };
    }
    

内容相关广告签名

  • 包含应用安装过滤功能的内容相关广告必须由买方签名。平台使用此签名来验证提供广告的广告技术平台,以及要应用于广告的广告技术平台应用安装过滤条件。这样做是为了防止恶意软件广告技术平台利用其他广告技术平台的身份从另一广告技术平台的应用安装过滤注册中获益。

  • Privacy Sandbox 将从注册期间提供的广告技术平台端点提取这些密钥。我们建议的最佳实践是,密钥必须经常更新,但间隔时间不长于每 6 个月一次。

  • 在注册过程中,Privacy Sandbox 会要求广告技术平台确认广告技术平台提供的端点是否可用。如需详细了解当前注册的和新注册的广告技术平台要求采取的操作,请参阅注册说明

  • 我们很快就会发布开发者指南,其中包含更详细的实现说明。