使用 FLEDGE 支持自定义受众群体定位

提供反馈

在移动广告中,广告主通常希望根据用户之前与广告主的应用进行互动的方式,向可能感兴趣的用户投放广告。例如,SportingGoodsApp 的开发者可能想要向购物车内留有商品的用户投放广告(通过展示广告来提醒用户完成购买)。业界通常使用“再营销”和“自定义受众群体定位”等术语来描述这种笼统的概念。

目前,这些用例的典型实现方式是与广告技术平台共享广告展示方式的相关上下文信息(例如应用名称),以及受众群体名单等私密信息。利用这些信息,广告主可以在其服务器上选择具有相关性的广告。

FLEDGE on Android 包含以下 API,可供广告技术平台和广告主用于支持常见的基于互动的用例,而其采用的方式既能限制应用之间共享标识符的行为,又能限制与第三方共享用户的应用互动信息的行为。

  1. Custom Audience API:此 API 以“自定义受众群体”的抽象概念为核心,该抽象概念表示广告主指定的具有共同意图的受众群体。受众群体信息存储在设备上,可与受众群体的相关候选广告和任意元数据(例如出价信号)相关联。这些信息可用于为广告主出价、广告过滤和呈现提供依据。
  2. Ad Selection API:此 API 提供了一个框架,用于编排广告技术平台的工作流程,以根据设备端信号确定“胜出”的广告(方法是考虑本地存储的候选广告,并对广告技术平台向设备返回的候选广告执行额外的处理)。
图 1. 展示 Privacy Sandbox on Android 中的自定义受众群体管理和广告选择工作流程的流程图。

大体上讲,相关集成的运作方式如下:

  1. 如果用户的购物车内留有商品且未在 2 天内完成购买,SportingGoodsApp 想要提醒用户购买这些商品。SportingGoodsApp 使用 Custom Audience API 将用户添加到“购物车中有商品”受众群体名单中。平台管理此受众群体名单并将其存储在设备上,以限制与第三方共享相关信息的行为。SportingGoodsApp 与广告技术平台合作,以向其受众群体名单中的用户展示广告。广告技术平台管理受众群体名单的元数据并提供候选广告,从而将候选广告提供给广告选择工作流程以备考虑。平台可配置为在后台定期获取经过更新的基于受众群体的广告。这有助于确保基于受众群体的候选广告列表保持最新状态,并且与在广告机会期间向第三方广告服务器发送的请求(即内容相关广告请求)无关。

  2. 当用户在同一设备上玩 FrisbeeGame 时,他们可能会看到一个广告,提醒他们完成对留在 SportingGoodsApp 购物车中的商品的购买。这可通过以下方式实现:FrisbeeGame(具有集成的广告 SDK)调用 Ad Selection API,以根据包含相应用户的任何受众群体名单(在此示例中,则为 SportingGoodsApp 创建的“购物车中有商品”自定义受众群体)为其选择胜出的广告。广告选择工作流程可设置为考虑从广告技术平台的服务器检索到的广告,而不仅仅是考虑与自定义受众群体和其他设备端信号相关联的设备端广告。广告技术平台和广告 SDK 还可借助自定义出价和评分逻辑自定义此工作流程,以实现相应的广告目标。通过此方法,即可使用用户的兴趣或应用互动数据作为广告选择的依据,同时限制与第三方共享这些数据的行为。

  3. 广告投放应用或广告技术平台的 SDK 会呈现所选广告。

  4. 平台将帮助生成展示次数和广告选择结果报告。此报告功能是对 Attribution Reporting API 的补充。广告技术平台可根据其报告需求进行自定义。

自定义受众群体管理

自定义受众群体

自定义受众群体表示一组具有共同意图或兴趣的用户。应用或 SDK 可使用自定义受众群体来表示特定受众群体,例如“购物车中留有商品”的用户,或在某个游戏中“打通新手关卡”的玩家。平台会在设备本地维护和存储受众群体信息。这有助于限制共享用户信息的行为。

广告主应用或集成的 SDK 可根据条件加入退出自定义受众群体,例如根据用户在应用中的互动情况。

自定义受众群体元数据

每个自定义受众群体都包含以下元数据:

  • 读取方:管理面向此自定义受众群体的广告的买方广告网络。
  • 名称:自定义受众群体的任意名称或标识符,例如“购物车中留有商品”的用户。 例如,此属性可在广告主的广告系列中用作定位条件之一,或在网址中用作查询字符串以提取出价代码。
  • 创建时间和到期时间:这些字段定义了此自定义受众群体生效的时间期限。平台会使用这些信息来撤销自定义受众群体的成员资格。到期时间不能超过时长期限上限,以限制自定义受众群体的生命周期。
  • 每日更新网址:平台用于定期提取“用户出价信号”字段中定义的候选广告和其他元数据的网址。如需了解详情,请参阅有关如何为自定义受众群体提取候选广告的部分。
  • 用户出价信号:广告技术平台专有信号,用于对再营销广告进行过滤和出价。此类信号的示例包括:用户的粗略位置信息、首选语言区域等。
  • 可信出价信号:广告技术平台依赖实时数据为广告检索和评分提供依据。例如,广告可能会用尽预算,并且需要立即停止投放。广告技术平台可定义一个网址端点(可从此位置提取相关实时数据),以及需要执行实时查询的一组键。处理此请求的服务器将是由广告技术平台管理的可信服务器
  • 出价逻辑网址:平台用于从需求方平台提取出价代码的网址。平台会在广告竞价发起后执行此步骤。
  • 广告:针对自定义受众群体的候选广告列表。其中包含广告技术平台专有的广告元数据和用于呈现广告的网址。针对自定义受众群体发起竞价后,系统会考虑此广告元数据列表。在可行的情况下,系统会使用每日更新网址端点刷新此广告列表。由于移动设备的资源有限,因此自定义受众群体中可存储的广告有数量限制。

加入自定义受众群体

应用可通过调用 JoinCustomAudience() 请求加入自定义受众群体,如以下说明代码段所示:

CustomAudience audience = new CustomAudience(
    "com.sporting-goods.app",      // Owner. Defaults to the calling app's
                                   // package name.
    "com.example-dsp",             // Reader.
    "running-shoes",               // A logical name for the custom audience.
    currentTime,                   // Creation time.
    expirationTime,                // Expiration time.
    Uri.parse("https://..."),      // Daily update URL.
    biddingData,                   // Trusted Bidding Data key/value pairs.
    candidateAdsList,              // List of candidate ads related to
                                   // this custom audience.
    biddingLogicUrl
);

// Invoke ad services API to join a custom audience.
joinCustomAudience(audience);

调用 joinCustomAudience() 的应用是此自定义受众群体的所有者。 调用此方法时,应用应指定以下几项信息:

读取方:代表可访问自定义受众群体并获取相关广告信息的各方。

名称:此自定义受众群体的名称

每日更新网址:候选广告列表的网址。

候选广告:自定义受众群体所有者加入自定义受众群体后,可从买方平台提取候选广告。平台还可配置为定期提取广告

退出自定义受众群体

自定义受众群体的所有者可通过调用 exitCustomAudience() 来选择退出相应受众群体,如以下说明代码段所示:

// Define a custom audience populated with key fields.
CustomAudience audience = new CustomAudience(
    "com.sporting-goods.app",     // Owner. Defaults to
                                  // the calling app's package name.
    "com.example-dsp",            // Reader.
    "running-shoes"               // A logical name for the custom audience.
    ...
);

// Invoke ad services API to leave a custom audience.
leaveCustomAudience(audience);

为帮助减少存储空间和其他设备资源的使用量,自定义受众群体会在预先确定的时间期限过后过期,并从设备端存储空间中移除。默认值有待确定。所有者可替换此默认值。

用户控制

  • 此方案旨在让用户能够以列表形式查看哪些已安装的应用关联了至少一个自定义受众群体。
  • 用户可从此列表中移除应用。此移除操作会移除与应用相关联的所有自定义受众群体,并阻止应用加入新的自定义受众群体。

此功能正处于设计阶段,细节信息将包含在后续更新中。

广告技术平台权限和控制

此方案旨在为应用提供控制其自定义受众群体的权限:

  • 应用可管理与自定义受众群体的关联。
  • 应用可向第三方广告技术平台授予代表其管理自定义受众群体的权限。

此功能正处于设计阶段,细节信息将包含在后续更新中。

提取针对自定义受众群体的候选广告

买方平台可以将基于用户互动的候选广告存储在设备上,以便在针对自定义受众群体运行竞价时评估这些候选广告。可通过两种互补的方式提取自定义受众群体的候选广告和相关元数据。

  1. 系统每日提取:应用加入某个自定义受众群体后,可指定平台每日查询的每日更新网址。广告技术平台可使用此功能让广告列表保持最新状态,并移除已失效或没有剩余预算的广告。平台会确保在处理广告提取请求之前,让网址端点传递 k 匿名性隐私保护阈值。
  2. 自定义受众群体所有者主导的提取:所有者将某个用户添加到自定义受众群体后,即可从买方平台提取候选广告。返回的广告和元数据可存储在自定义受众群体的“广告”字段中。如果广告技术平台想要立即开始向该用户投放广告,可能需要使用此功能。

候选广告和元数据响应

从买方平台返回的候选广告和元数据应包含以下字段:

  • 元数据:买方广告技术专有广告元数据。例如,这可能包含广告系列的相关信息以及定位条件(例如位置和语言)。
  • 呈现网址:用于呈现广告素材的端点。

广告选择工作流程

此方案旨在引入 Ad Selection API,用于为广告技术平台编排竞价执行,从而更好地保护隐私。

如今,广告技术平台通常只在其服务器上执行出价和广告选择。在此方案中,自定义受众群体和其他敏感的用户信号(例如可用的已安装软件包信息)只可通过 Ad Selection API 获取。此外,对于再营销用例,候选广告将从带外进行提取(即在将要展示广告的上下文范围外进行提取)。广告技术平台将需要做好准备,以便在设备上部署和执行当前竞价和广告选择逻辑的部分流程。广告技术平台可以考虑对其广告选择工作流程进行以下更改:

  • 如果服务器上没有已安装的软件包信息,广告技术平台可能需要将多个内容相关广告发送回设备,并调用广告选择工作流程以启用基于应用安装的过滤功能,从而尽可能提高展示相关广告的机会。
  • 由于再营销广告是从带外提取的,因此可能需要更新当前的出价模型。广告技术平台可能需要创建出价子模型(实现方式可能基于一种称为双塔模型的模式),这种子模型可单独处理广告功能和上下文信号,并在设备上组合子模型输出,从而预测出价。无论是服务器端竞价还是针对任何给定广告机会的竞价,这种方式均可从中受益。

通过此方法,即可使用用户的应用互动数据作为广告选择的依据,同时限制与第三方共享这些数据的行为。

图 2. 展示广告选择工作流程如何启动的流程图。

此广告选择工作流程会按以下顺序编排由广告技术平台提供的 JavaScript 代码在设备上的执行:

  1. 买方出价逻辑执行
  2. 买方广告过滤和处理
  3. 卖方决策逻辑执行

对于涉及自定义受众群体的广告选择,平台会根据自定义受众群体的“出价逻辑网址”元数据所定义的公共网址端点,提取买方提供的 JavaScript 代码。卖方决策代码的网址端点也将作为输入传递,用于启动广告选择工作流程。

不涉及自定义受众群体的广告选择正在积极设计中。

启动广告选择工作流程

当应用需要展示广告时,广告技术平台 SDK 可通过调用 runAdAuction() 方法来启动广告选择工作流程。

此 API 需要以下参数:

卖方:卖方广告平台的标识符。

决策逻辑网址:发起广告竞价后,平台会使用此网址从卖方平台获取 JavaScript 代码,以便通过评分选出胜出的广告。

自定义受众群体买方:对相应竞价具有基于自定义受众群体的需求的买方平台列表。

竞价信号:竞价的相关信息(广告尺寸、广告格式等)。

卖方信号:供应方平台专有信号。

可信评分信号网址:卖方可信信号的网址端点,可从其中提取广告素材专有的实时信息。

每个买方的信号:参与竞价的需求方可使用此参数为竞价提供输入。例如,此参数可能包含有助于确定出价的全面上下文信息。

以下说明代码段展示了广告技术平台 SDK 启动广告选择工作流程的过程:

AuctionConfig myAuctionConfig = new AuctionConfig {
    "com.example.app",         // Package name for the calling app.
    Uri.parse("https://..."),  // Decision logic URL.
    customAudienceBuyerList,   // List of package names
                               // for custom audience buyers.
    auctionSignals,            // Auction signals
    sellerSignals,             // Seller signals
    perBuyerSignals,           // Per buyer signals
    ...
};

// Invoke ad services API to initiate ad selection workflow.
Ad winningAd = runAdAuction(myAuctionConfig);

买方出价逻辑

出价逻辑通常由买方平台提供。此代码旨在确定候选广告的出价。它可能会应用其他业务逻辑来确定结果。

平台会使用自定义受众群体的“出价逻辑网址”元数据来提取 JavaScript 代码,此代码应包含以下函数签名:

generateBid(ad, auction_signals, per_buyer_signals, trusted_bidding_signals,
        contextual_signals, user_signals, custom_audience_signals) {
    // ...
    return {'bid': ...};
}

generateBid() API 会返回计算得出的出价金额。平台将依序为所有广告(内容相关广告或再营销广告)调用此函数。如果有多个出价逻辑提供程序,系统无法保证这些提供程序之间的执行顺序。

此函数需要以下参数:

广告:买方出价代码所考虑的广告。这可能是来自自定义受众群体的广告,也可能是在上下文响应中返回的广告。

竞价信号:卖方平台专有信号。

每个买方的信号:参与竞价的需求方可使用此参数为竞价提供输入。例如,此参数可能包含有助于确定出价的全面上下文信息。

可信出价信号:广告技术平台依赖实时数据为广告检索和评分提供依据。例如,广告系列可能会用尽预算,并且需要立即停止投放。广告技术平台可定义一个网址端点(可从此位置提取相关实时数据),以及需要执行实时查询的一组键。处理此请求的广告技术平台的托管服务器将是由广告技术平台管理的可信服务器。

上下文信号:这可能包含粗略的时间戳或大致位置信息。

用户信号:这可能包含可用的已安装软件包信息等信息。

买方过滤逻辑

买方平台将能够根据广告选择阶段可用的其他设备端信号来过滤广告。例如,广告技术平台可在这里实现频次上限功能。如果有多个过滤提供程序,系统无法保证这些提供程序之间的执行顺序。

买方过滤逻辑将在出价逻辑之后运行。

平台会使用自定义受众群体的“出价逻辑网址”元数据来提取 JavaScript 代码,此代码应包含以下函数签名:

filterAd(ad, per_buyer_signals, trusted_bidding_signals, contextual_signals,
        user_signals) {
    // ...
    return is_filtered;
}

此 JavaScript 函数需要的输入参数与出价逻辑函数中的输入参数类似。

卖方决策逻辑

评分逻辑通常由卖方平台提供。此代码旨在根据出价逻辑输出来确定胜出的广告。它可能会应用其他业务逻辑来确定结果。如果有多个决策逻辑提供程序,系统无法保证这些提供程序之间的执行顺序。平台会使用 runAdAuction() API 的“决策逻辑网址”输入参数来提取 JavaScript 代码,此代码应包含以下函数签名:

scoreAd(ad, bid, auction_config, trusted_scoring_signals,
        contextual_signals, user_signals, custom_audience_signals) {
    // ...
    return score_for_this_ad;
}

此函数需要以下参数:

广告:所评估的广告;generateBid() 和 filterAd() 函数的输出。

出价:generateBid() 函数输出的出价金额。

竞价配置runAdAuction() 方法的输入参数。

可信评分信号:广告技术平台依赖实时数据为广告过滤和评分提供依据。例如,应用发布商可阻止某个广告系列在应用中展示广告。系统会从竞价配置的可信评分信号网址参数中提取相应数据。处理此请求的服务器应该是由广告技术平台管理的可信服务器。

上下文信号:这可能包含粗略的时间戳或大致位置信息。

用户信号:这可能包含启动应用安装的应用商店等信息。

自定义受众群体信号:如果要评分的广告来自设备端的自定义受众群体,这将包含自定义受众群体的读取方和名称等信息。

广告选择代码运行时

在此方案中,系统将从可配置的网址端点中提取广告技术平台提供的竞价代码,并在设备上执行。鉴于移动设备上的资源有限,竞价代码应遵循以下准则:

  • 代码应在预定义的时间段内执行完毕。此约束条件将统一应用于所有买方广告网络。此约束条件的详细信息将在后续更新中分享。
  • 代码必须保持独立,不得包含任何外部依赖项。

由于竞价代码(例如出价逻辑)可能需要访问应用安装来源等用户私人数据,因此运行时将不提供网络或存储空间访问权限。

编程语言

广告技术平台提供的竞价代码应使用 JavaScript 编写。 这样一来,广告技术平台便可执行诸多操作,例如在支持 Privacy Sandbox 的平台上共享出价代码。

赢得广告呈现机会

得分最高的广告将被视为竞价胜出方。在此初始方案中,胜出的广告将传递到 SDK 中进行呈现。

我们的计划是要改进此解决方案,确保应用或 SDK 无法通过与胜出的广告相关的信息来确定与用户的自定义受众群体成员资格或应用互动记录相关的信息(类似于 Chrome 的围栏框架方案)。

展示次数报告

广告呈现后,系统即可将胜出的展示报告回参与竞价的买方和卖方平台。平台将按以下顺序调用报告逻辑:

  1. 卖方报告。
  2. 买方报告。

这样一来,买方和卖方平台就能够将重要的设备端信息(例如出价信息、自定义受众群体名称等)发回服务器,以启用实时预算、出价模型更新和精确的结算工作流程等功能。此展示报告支持是对 Attribution Reporting API 的补充。

卖方报告

平台将调用供应方提供的代码(从卖方在 runAdAuction() API 中的决策逻辑网址参数中提供的网址下载)中的 reportResult() JavaScript 函数:

reportResult(render_url, bid, auction_config, contextual_signals) {
    // ...
    return reporting_url, signals_for_buyer;
}

输出:

  • 报告网址:平台将调用相应函数返回的这一网址。

供应方可对报告网址中的相关信号进行编码,以帮助其更深入地分析竞价和胜出的广告。例如,此网址可能包含以下信号:

  • 广告呈现网址
  • 胜出的出价金额
  • 应用名称
  • 查询标识符
  • 买方信号:为支持在供应方和需求方之间共享数据,平台会将此返回值作为输入参数传递给需求方报告代码。

买方报告

平台将调用需求方提供的代码(从与竞价相关联的自定义受众群体的出价逻辑网址元数据中提供的网址下载)中的 reportResult() JavaScript 函数。

reportResult(render_url, bid, auction_signals, per_buyer_signals,
        signals_for_buyer, contextual_signals, custom_audience_signals) {
    // ...
    return reporting_url;
}

输入:

  • auction_signalsper_buyer_signals 将从 AuctionConfig 中提取。买方平台需要传递到报告网址的所有信息都可能来自这些数据。
  • signals_for_buyer 是卖方 reportResult 的输出。这样一来,卖方平台就有机会与买方平台共享数据以生成报告。
  • contextual_signals 将包含应用名称等信息,而 custom_audience_signals 将包含自定义受众群体信息。未来可能会添加其他信息。

输出:

  • 报告网址:平台将调用相应函数返回的这一网址。

由广告技术平台管理的可信服务器

目前的广告选择逻辑需要预算消耗状态等实时信息,才能确定是否应该选择候选广告以进行出价。买方和卖方平台均可从其运行的服务器获取这些信息。为尽量减少通过这些服务器泄露任何敏感信息,此方案要求进行以下限制:

  • 这些服务器的行为(本部分的后续内容将会介绍)不会泄露任何用户信息。
  • 服务器不会根据其看到的数据创建假名化个人资料,也就是说,服务器必须是“可信”的。

买方:买方启动买方出价逻辑后,平台会从可信服务器对可信出价数据进行 HTTP 提取。此网址的构成方式如下:附加所处理的自定义受众群体的“可信出价信号”元数据中的网址和键。只有在处理来自设备端自定义受众群体的广告时,系统才会进行此类提取。在此阶段,买方可强制执行预算、检查广告系列暂停/取消暂停状态、执行定位,还可执行更多其他操作。

以下是一个示例网址,用于根据来自自定义受众群体的“可信出价信号”元数据提取可信出价数据:

https://www.kv-server.example/getvalues?keys=key1,key2

服务器的响应应该是一个 JSON 对象,其键为 key1、key2 等,其值将可供买方的出价函数使用。

卖方:与上述买方流程类似,卖方可能需要提取竞价中所考虑的广告素材的相关信息。例如,发布商可能会出于品牌保障方面的考虑,强制要求特定广告素材不得在其应用中展示。此信息可供提取,并可供卖方竞价逻辑使用。与买方可信服务器查询类似,卖方可信服务器查询也是通过 HTTP 提取进行的。此网址的构成方式如下:为可信评分信号网址附加需要提取数据的广告素材的呈现网址。

以下是一个示例网址,用于根据广告素材呈现网址来提取竞价中所考虑的广告素材的相关信息:

https://www.kv-server.example/getvalues?renderurls=render_url1,render_url2

服务器的响应应该是一个 JSON 对象,其键为请求中所发送的呈现网址。

这些服务器会以可信方式运行,在安全和隐私保护方面具有诸多优势:

  • 可以信任服务器为每个键返回的值均仅基于相应的键。
  • 服务器不会执行事件级日志记录。
  • 服务器不会根据这些请求产生其他副作用。

作为一种临时机制,买方和卖方可从任何服务器(包括他们自己运营的服务器)提取这些出价信号。不过,在发布版本中,请求将仅发送到可信的键值对类型服务器。

买方和卖方可针对兼容 Privacy Sandbox on Android 的平台和网页使用通用的可信键值对类型服务器。