Privacy Sandbox on Android 开发者预览版现已推出!了解如何开始使用,并继续提供反馈

应用安装广告过滤

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

本方案将介绍 Android 版 FLEDGE 如何以保护隐私的方式支持内容相关广告过滤,尤其是应用安装广告过滤。如要参与,设备上的应用必须明确选择启用应用安装广告过滤。选择广告时,系统会根据在 AdTech 中已知的设备上已安装应用的列表来过滤候选广告。已安装应用的列表仅在广告选择流程中可见,并依赖买家平台根据该设备上是否已安装相应应用来指示是否过滤特定广告。

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

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

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

void registerForAdFiltering(List<AdTechIdentifier> buyers);

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

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

  • 对于内容相关广告用例(应用安装广告过滤的主要用例),过滤信息会包含在广告数据中,而买家在响应 FLEDGE 外收到的内容相关广告出价时,会向卖家提供这些数据。FLEDGE 会预期此过滤信息像其他广告专有的元数据一样,作为内容相关响应的一部分返回。

  • 对于再营销广告用例,FLEDGE 会预期过滤信息包含在自定义受众群体中。有两个时机可纳入这些信息:一是在加入受众群体时,二是在更新受众群体过程中提取新的受众群体数据时。

过滤应用安装广告的请求在 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 中进行处理。如果消息中指定的应用与 AdTech 中买家特定的应用安装列表中的应用相符,则 FLEDGE 将过滤该广告。可能会出现两种结果:

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

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

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

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

  • 进行 selectAd 竞价时,买家可以选择传入 ContextualAd 对象的列表。此类对象会包含广告买家的 eTLD+1、广告出价、指向广告报告逻辑的网址,以及包含实际广告内容网址的 AdData。请注意,内容相关广告和再营销广告都会使用 AdData 格式。

  • 在竞价开始时,系统会根据用户列出的、对其显示的应用,过滤内容相关广告和再营销广告。然后,系统会为所有再营销广告确定出价值,并使用提供的 scoreAds 函数对再营销广告和内容相关广告进行评分。得分最高的广告将胜出。请注意,即使没有再营销广告,此流程也会进行。

  • 如果内容相关广告赢得竞价,并且该应用触发了展示次数报告,则 FLEDGE 将从内容相关广告数据包含的报告网址下载并执行一个名为 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} };
    }