近期更新
- 添加了针对自定义受众群体委托功能的方案。
- 取消了对每日更新网址的 k-匿名性要求
概览
在移动广告中,广告主通常希望根据用户之前与广告主的应用进行互动的方式,向可能感兴趣的用户投放广告。例如,SportingGoodsApp 的开发者可能想要向购物车内留有商品的用户投放广告(通过展示广告来提醒用户完成购买)。业界通常使用“再营销”和“自定义受众群体定位”等术语来描述这种笼统的概念。
目前,这些用例的典型实现方式是与广告技术平台共享广告展示方式的相关上下文信息(例如应用名称),以及受众群体名单等私密信息。利用这些信息,广告主可以在其服务器上选择具有相关性的广告。
FLEDGE on Android 包含以下 API,可供广告技术平台和广告主用于支持常见的基于互动的用例,而其采用的方式既能限制应用之间共享标识符的行为,又能限制与第三方共享用户的应用互动信息的行为。
- Custom Audience API:此 API 以“自定义受众群体”的抽象概念为核心,该抽象概念表示广告主指定的具有共同意图的受众群体。受众群体信息存储在设备上,可与受众群体的相关候选广告和任意元数据(例如出价信号)相关联。这些信息可用于为广告主出价、过滤广告和呈现提供依据。
- Ad Selection API:此 API 提供了一个框架,用于编排广告技术平台的工作流程,以根据设备端信号确定“胜出”的广告(方法是考虑本地存储的候选广告,并对广告技术平台向设备返回的候选广告执行额外的处理)。
大体上讲,相关集成的运作方式如下:
如果用户的购物车内留有商品且未在 2 天内完成购买,SportingGoodsApp 想要提醒用户购买这些商品。SportingGoodsApp 使用 Custom Audience API 将用户添加到“购物车中有商品”受众群体名单中。平台管理此受众群体名单并将其存储在设备上,以限制与第三方共享相关信息的行为。SportingGoodsApp 与广告技术平台合作,以向其受众群体名单中的用户展示广告。广告技术平台管理受众群体名单的元数据并提供候选广告,从而将候选广告提供给广告选择工作流程以备考虑。平台可配置为在后台定期获取经过更新的基于受众群体的广告。这有助于确保基于受众群体的候选广告列表保持最新状态,并且与在广告机会期间向第三方广告服务器发送的请求(即内容相关广告请求)无关。
当用户在同一设备上玩 FrisbeeGame 时,他们可能会看到一个广告,提醒他们购买留在 SportingGoodsApp 购物车中的商品。这可通过以下方式实现:FrisbeeGame(具有集成的广告 SDK)调用 Ad Selection API,以根据包含相应用户的任何受众群体名单(在此示例中,则为 SportingGoodsApp 创建的“购物车中有商品”自定义受众群体)为其选择胜出的广告。广告选择工作流程可设置为考虑从广告技术平台的服务器检索到的广告,而不仅仅是考虑与自定义受众群体和其他设备端信号相关联的设备端广告。广告技术平台和广告 SDK 还可借助自定义出价和评分逻辑自定义此工作流程,以实现相应的广告目标。通过此方法,即可使用用户的兴趣或应用互动数据作为广告选择的依据,同时限制与第三方共享这些数据的行为。
广告投放应用或广告技术平台的 SDK 会呈现所选广告。
平台将帮助生成展示次数和广告选择结果报告。此报告功能是对 Attribution Reporting API 的补充。广告技术平台可根据其报告需求进行自定义。
获取对 FLEDGE for Android API 的访问权限
广告技术平台需要注册才能访问 FLEDGE for Android API。如需了解详情,请参阅注册 Privacy Sandbox 帐号。
自定义受众群体管理
自定义受众群体
自定义受众群体表示由广告主确定的一组具有共同意图或兴趣的用户。应用或 SDK 可使用自定义受众群体来表示特定受众群体,例如“购物车中留有商品”的用户,或在某个游戏中“打通新手关卡”的玩家。平台会在设备本地维护和存储受众群体信息,并且不会公开用户所属的自定义受众群体。自定义受众群体与 Chrome 兴趣组中的 FLEDGE 不同,且无法在网站和应用之间共享。这有助于限制共享用户信息的行为。
广告主应用或集成的 SDK 可根据条件加入或退出自定义受众群体,例如根据用户在应用中的互动情况。
自定义受众群体元数据
每个自定义受众群体都包含以下元数据:
- 所有者:所有者应用的软件包名称。该变量会隐式设置为调用方应用的软件包名称。
- 买方:管理面向此自定义受众群体的广告的买方广告网络。买方还代表可访问自定义受众群体并获取相关广告信息的各方。可以按照 eTLD+1 格式指定买方。
- 名称:自定义受众群体的任意名称或标识符,例如可以将用户标识为“购物车放弃者”。 例如,此属性可在广告主的广告系列中用作定位条件之一,或在网址中用作查询字符串以提取出价代码。
- 激活时间和到期时间:这些字段定义了此自定义受众群体生效的时间期限。平台会使用这些信息来撤销自定义受众群体的成员资格。到期时间不能超过时长期限上限,以限制自定义受众群体的生命周期。
- 每日更新网址:平台用于提取“用户出价信号”和“可信出价信号”字段中定义的候选广告和其他元数据的网址。如需了解详情,请参阅有关如何为自定义受众群体提取候选广告的部分。
- 用户出价信号:广告技术平台专有信号,用于对再营销广告进行出价。此类信号的示例包括:用户的粗略位置信息、首选语言区域等。
- 可信出价数据:广告技术平台依赖实时数据为广告检索和评分提供依据。例如,广告可能会用尽预算,并且需要立即停止投放。广告技术平台可定义一个网址端点(可从此位置提取相关实时数据),以及需要执行实时查询的一组键。处理此请求的服务器将是由广告技术平台管理的可信服务器。
- 出价逻辑网址:平台用于从需求方平台提取出价代码的网址。平台会在广告竞价发起后执行此步骤。
- 广告:针对自定义受众群体的候选广告列表。其中包含广告技术平台专有的广告元数据和用于呈现广告的网址。针对自定义受众群体发起竞价后,系统会考虑此广告元数据列表。在可行的情况下,系统会使用每日更新网址端点刷新此广告列表。由于移动设备的资源有限,因此自定义受众群体中可存储的广告有数量限制。
自定义受众群体委托
传统的自定义受众群体定义和配置通常依赖于由广告技术平台、代理机构客户/广告主客户及合作伙伴合力推进的服务器端技术和集成服务。FLEDGE 能够以可保护隐私的方式实现自定义受众群体定义和配置。若要加入自定义受众群体,应用中不存在 SDK 的买方广告技术平台需要与设备端存在 SDK 的广告技术平台合作,例如移动衡量合作伙伴 (MMP) 需与供应方平台 (SSP) 携手合作。FLEDGE API 旨在通过让设备端调用方能够代表买方调用自定义受众群体创建流程,从而提供适用于管理自定义受众群体的灵活解决方案,支持这类 SDK。此过程称为“自定义受众群体委托”。请按照以下步骤配置自定义受众群体委托:
加入自定义受众群体
可以通过以下两种方式加入自定义受众群体:
joinCustomAudience()
应用或 SDK 可以先使用预期参数实例化 CustomAudience
对象,然后调用 joinCustomAudience()
来请求加入自定义受众群体。说明代码段示例如下:
CustomAudience audience = new CustomAudience(
Buyer = "example-dsp.com",
Name = "running-shoes",
ActivationTime = now(),
ExpirationTime = ActivationTime.plus(30 days),
DailyUpdateURL = Uri.parse("https://..."),
UserBiddingSignals = new JSONObject("{...}"),
TrustedBiddingURL = Uri.parse("https://..."),
TrustedBiddingKeys = {'key1","key2", ...,"key n"},
BiddingLogicURL = Uri.parse("https://..."),
Ads = [new AdData(renderUrl = Uri.parse("https://..."),
metadata = new JSONObject("{...}"), ...];
// Invoke ad services API to join a custom audience.
joinCustomAudience(audience);
fetchCustomAudience()
应用或 SDK 可以代表设备端不存在 SDK 的广告技术平台请求加入自定义受众群体,方法是使用预期参数调用 fetchCustomAudience()
,如以下示例所示:
CustomAudienceFetchRequest fetchRequest = new CustomAudienceFetchRequest(
// Example: Optional verification token passed inside the fetch URL
FetchURI = Uri.parse("https://example-dsp.com/...?mytoken=arbitrary1234"),
// All the following parameters are optional
Name = "running-shoes",
ActivationTime = now(),
ExpirationTime = ActivationTime.plus(30 days),
UserBiddingSignals = new JSONObject("{...}")
);
fetchCustomAudience(fetchRequest);
买方拥有的网址端点会在响应正文中返回 CustomAudience
JSON 对象作为响应。自定义受众群体的买方和所有者字段将被忽略(并由 API 自动填充)。该 API 还会强制让每日更新网址也与买方的 eTLD+1 一致。
{
"name": "running-shoes",
"activation_time": 1680603133,
"expiration_time": 1680803133,
"user_bidding_signals" : {"signal1": "value"},
"trusted_bidding_data": {
"trusted_bidding_uri": "https://example-dsp.com/.."
"trusted_bidding_keys": ["k1", "k2"],
},
"bidding_logic_uri": "https://example-dsp.com/...",
"ads": [
{
"render_uri": "https://example-dsp.com/...",
"metadata": {},
"ad_filters": {
"frequency_cap": {
"win": [
{
"ad_counter_key": "key1",
"max_count": 2,
"interval_in_seconds": 60
},
],
"view": [
{
"ad_counter_key": "key2",
"max_count": 10,
"interval_in_seconds": 3600
},
]
},
"app_install": {
"package_names": [
"package.name.one",
"package.name.two", ...
]
}
}
},
...
]
}
fetchCustomAudience()
API 根据 fetchUri
的 eTLD+1 确定买方的身份。CustomAudience
买方的身份信息用于执行与 joinCustomAudience()
执行的注册和应用授权检查相同的操作,并且不能通过提取响应而更改。CustomAudience
Owner 是调用方应用的软件包名称。除了 eTLD+1 检查之外,对 fetchUri
没有其他验证,特别是没有 k-匿名性检查。fetchCustomAudience()
API 会向 fetchUri
发出 HTTP GET 请求,并预期获取表示自定义受众群体的 JSON 对象。自定义受众群体对象字段的相同强制性可选限制条件和默认值将应用于该响应。如需了解当前要求和限制,请参阅我们的开发者指南。买方发送的任何 HTTP 错误响应都会导致 CustomAudience
失败。尤其是 HTTP 状态响应码 429(请求过多)将在定义的时间段内屏蔽来自当前应用的请求。失败情况会报告给负责在出现临时失败(例如服务器未响应或超时)重试的 API 调用方,或报告以便处理持续失败(例如数据验证失败或任何在与服务器通信期间出现的其他非临时错误)。
CustomAudienceFetchRequest
对象允许 API 调用方使用上述示例中显示的可选属性为自定义受众群体定义一些信息。如果被指定,这些值便无法由买方收到的买方响应所覆盖。FLEDGE 将忽略响应中的字段。由 API 调用方部分定义的 CustomAudience 内容的 JSON 表示法包含在特殊头文件 X-CUSTOM-AUDIENCE-DATA
中对 fetchUri
的 GET 请求内。为自定义受众群体指定的数据大小上限为 8 KB。
由于缺少 k-匿名性检查,您可使用 fetchUri
进行买方验证,还可支持在买方和 SDK 之间共享信息。为方便自定义受众群体验证,买方可以提供验证令牌。设备端 SDK 应在 fetchUri
中包含此令牌,以便买方托管的端点可以提取自定义受众群体的内容并使用验证令牌来验证 fetchCustomAudience()
操作对应于买方且来自可信的设备端合作伙伴。如需共享信息,买方可以同意设备端调用方将用于创建自定义受众群体的部分信息作为查询参数添加到 fetchUri
中。这样,买方就可以审核调用,并检测是否有恶意广告技术平台使用了验证令牌来创建多个不同的自定义受众群体。
关于验证令牌定义和存储的说明
验证令牌不供 FLEDGE 用于任何用途,且是可选的。
- 买方可以使用验证令牌验证所创建的受众群体是否是以买方自己的名义所创建。
- FLEDGE 方案既不会指定验证令牌的格式,也不会指定买方如何将验证令牌传递给调用方。例如,验证令牌可以在所有者的 SDK 或后端中预加载,也可以由买方的 SDK 从买方的服务器中实时检索。
退出自定义受众群体
自定义受众群体的所有者可通过调用 leaveCustomAudience()
来选择退出相应受众群体,如以下说明代码段所示:
// Invoke ad services API to leave a custom audience.
leaveCustomAudience(buyer, name);
为帮助减少存储空间和其他设备资源的使用量,自定义受众群体会在预先确定的时间期限过后过期,并从设备端存储空间中移除。默认值有待确定。所有者可替换此默认值。
用户控制
- 此方案旨在让用户能够以列表形式查看哪些已安装的应用创建了至少一个自定义受众群体。
- 用户可从此列表中移除应用。此移除操作会清除与应用相关联的所有自定义受众群体,并阻止应用加入新的自定义受众群体。
- 用户可以完全重置 FLEDGE。在这种情况下,系统会清除设备上的所有现有自定义受众群体。
- 用户还可选择完全停用 Privacy Sandbox on Android(包括 FLEDGE)。在这种情况下,FLEDGE API 会返回标准异常消息:
SECURITY_EXCEPTION
。
此功能正处于设计阶段,细节信息将包含在后续更新中。
应用权限和控制
此方案旨在为应用提供控制其自定义受众群体的权限:
- 应用可管理与自定义受众群体的关联。
- 应用可向第三方广告技术平台授予代表其管理自定义受众群体的权限。
此功能正处于设计阶段,细节信息将包含在后续更新中。
广告技术平台控制
此方案概述了广告技术平台控制其自定义受众群体的方法:
- 广告技术平台注册 Privacy Sandbox,并提供与自定义受众群体的所有网址匹配的 eTLD+1 域名。
- 广告技术平台可与应用或 SDK 合作,提供用于验证自定义受众群体创建信息的验证令牌。当此过程委托给合作伙伴时,可以将自定义受众群体创建配置为需要广告技术平台确认。
- 广告技术平台可以选择代表其自身停用
joinCustomAudience
调用,并仅允许fetchCustomAudience
API 启用所有调用自定义受众群体。注册 Privacy Sandbox 期间可以更新控制设置。请注意,此控制允许所有广告技术平台,或全都不允许。由于平台限制,无法针对每个广告技术平台授予委托权限。
此功能正处于设计阶段,细节信息将包含在后续更新中。
候选广告和元数据响应
从买方平台返回的候选广告和元数据应包含以下字段:
- 元数据:买方端广告技术平台专有的广告元数据。例如,这可能包含广告系列的相关信息以及定位条件(例如位置和语言)。
- 呈现网址:用于呈现广告素材的端点。
- 过滤器:FLEDGE 根据设备上的数据过滤广告所需的可选信息。如需了解详情,请参阅买方过滤逻辑。
广告选择工作流程
此方案旨在引入 Ad Selection API,用于为广告技术平台编排竞价执行,从而更好地保护隐私。
如今,广告技术平台通常只在其服务器上执行出价和广告选择。在此方案中,自定义受众群体和其他敏感的用户信号(例如可用的已安装软件包信息)只可通过 Ad Selection API 获取。此外,对于再营销用例,候选广告将从带外进行提取(即在将要展示广告的上下文范围外进行提取)。广告技术平台将需要做好准备,以便在设备上部署和执行当前竞价和广告选择逻辑的部分流程。广告技术平台可以考虑对其广告选择工作流程进行以下更改:
- 如果服务器上没有已安装的软件包信息,广告技术平台可能需要将多个内容相关广告发送回设备,并调用广告选择工作流程以启用基于应用安装的过滤功能,从而尽可能提高展示相关广告的机会。
- 由于再营销广告是从带外提取的,因此可能需要更新当前的出价模型。广告技术平台可能需要创建出价子模型(实现方式可能基于一种称为双塔模型的模式),这种子模型可单独处理广告功能和上下文信号,并在设备上组合子模型输出,从而预测出价。无论是服务器端竞价还是针对任何给定广告机会的竞价,这种方式均可从中受益。
通过此方法,即可使用用户的应用互动数据作为广告选择的依据,同时限制与第三方共享这些数据的行为。
此广告选择工作流程会按以下顺序编排由广告技术平台提供的 JavaScript 代码在设备上的执行:
对于涉及自定义受众群体的广告选择,平台会根据自定义受众群体的“出价逻辑网址”元数据所定义的公共网址端点,提取买方提供的 JavaScript 代码。卖方决策代码的网址端点也将作为输入传递,用于启动广告选择工作流程。
不涉及自定义受众群体的广告选择正在积极设计中。
启动广告选择工作流程
当应用需要展示广告时,广告技术平台 SDK 可以先使用预期参数实例化 AdSelectionConfig
对象,然后调用 selectAds()
方法来启动广告选择工作流程:
- 卖方:卖方广告平台的标识符,采用 eTLD+1 格式
- 决策逻辑网址:发起广告竞价后,平台会使用此网址从卖方平台获取 JavaScript 代码,以便通过评分选出胜出的广告。
- 自定义受众群体买方:对相应竞价具有基于自定义受众群体的需求的买方平台列表,采用 eTLD+1 格式。
- 广告选择信号:竞价的相关信息(广告尺寸、广告格式等)。
- 卖方信号:供应方平台专有信号。
- 可信评分信号网址:卖方可信信号的网址端点,可从其中提取广告素材专有的实时信息。
- 每个买方的信号:参与竞价的需求方可使用此参数为竞价提供输入。例如,此参数可能包含有助于确定出价的全面上下文信息。
以下说明代码段展示了广告技术平台 SDK 启动广告选择工作流程的过程(首先定义 AdSelectionConfig
,然后调用 selectAds
以获取胜出的广告):
AdSelectionConfig myAdSelectionConfig = new AdSelectionConfig {
Seller = "example-ssp1.com",
DecisionLogicURL = Uri.parse("https://..."),
CustomAudienceBuyerList = Arrays.asList("example-dsp1.com","bexample-dsp2.com"),
AdSelectionSignals = "{"min_price": 10,"auction_attempts": 3}"
SellerSignals = "{"seller_type": "news", "content_category": "sports","mature_ads_accepted" :"false"}"
PerBuyerSignals = " {"buyer1Name": {"key1" : "value1"},
"buyer2Name": {"key1" : "value1", "key2" : "value2" }"
};
// Invoke ad services API to initiate ad selection workflow.
Ad winningAd = selectAds(myAdSelectionConfig);
买方出价逻辑
出价逻辑通常由买方平台提供。此代码旨在确定候选广告的出价。它可能会应用其他业务逻辑来确定结果。
平台会使用自定义受众群体的“出价逻辑网址”元数据来提取 JavaScript 代码,此代码应包含以下函数签名:
generateBid(ad, auction_signals, per_buyer_signals, trusted_bidding_signals,
contextual_signals, user_signals, custom_audience_signals) {
// ...
return {'bid': ...};
}
generateBid()
方法会返回计算得出的出价金额。平台将依序为所有广告(内容相关广告或再营销广告)调用此函数。如果有多个出价逻辑提供程序,系统无法保证这些提供程序之间的执行顺序。
此函数需要以下参数:
- 广告:买方出价代码所考虑的广告。这是来自符合条件的自定义受众群体的广告
- 竞价信号:卖方平台专有信号。
- 每个买方的信号:参与竞价的需求方可使用此参数为竞价提供输入。例如,此参数可能包含有助于确定出价的全面上下文信息。
- 可信出价信号:广告技术平台依赖实时数据为广告检索和评分提供依据。例如,广告系列可能会用尽预算,并且需要立即停止投放。广告技术平台可定义一个网址端点(可从此位置提取相关实时数据),以及需要执行实时查询的一组键。处理此请求的广告技术平台的托管服务器将是由广告技术平台管理的可信服务器。
- 上下文信号:这可能包含粗略的时间戳或大致位置信息。
- 用户信号:这可能包含可用的已安装软件包信息等信息。
买方过滤逻辑
买方平台将能够根据广告选择阶段可用的其他设备端信号来过滤广告。例如,广告技术平台可在这里实现频次上限功能。如果有多个过滤提供程序,系统无法保证这些提供程序之间的执行顺序。
买方过滤逻辑可以作为出价逻辑的一部分来实现,方法是针对指定广告返回出价值 0
。
除此之外,买方平台还将能够发出信号,指示应根据 FLEDGE 可用的额外设备端信号来过滤特定广告,并指示不应离开设备。我们将不断强化更多过滤逻辑的设计,与此同时,买方平台将遵循这一相同结构来发出关于过滤逻辑的信号。
卖方评分逻辑
评分逻辑通常由卖方平台提供。此代码旨在根据出价逻辑输出来确定胜出的广告。它可能会应用其他业务逻辑来确定结果。如果有多个决策逻辑提供程序,系统无法保证这些提供程序之间的执行顺序。平台会使用 selectAds()
API 的“决策逻辑网址”输入参数来提取 JavaScript 代码,此代码应包含以下函数签名:
scoreAd(ad, bid, auction_config, trusted_scoring_signals,
contextual_signals, user_signals, custom_audience_signals) {
// ...
return score_for_this_ad;
}
此函数需要以下参数:
- 广告:接受评估的广告;
generateBid()
函数的输出。 - 出价:
generateBid()
函数输出的出价金额。 - 竞价配置:
selectAds()
方法的输入参数。 - 可信评分信号:广告技术平台依赖实时数据为广告过滤和评分提供依据。例如,应用发布商可阻止某个广告系列在应用中展示广告。系统会从竞价配置的可信评分信号网址参数中提取相应数据。处理此请求的服务器应该是由广告技术平台管理的可信服务器。
- 上下文信号:这可能包含粗略的时间戳或大致位置信息。
- 用户信号:这可能包含启动应用安装的应用商店等信息。
- 自定义受众群体信号:如果要评分的广告来自设备端的自定义受众群体,这将包含自定义受众群体的读取方和名称等信息。
广告选择代码运行时
在此方案中,系统将从可配置的网址端点中提取广告技术平台提供的竞价代码,并在设备上执行。鉴于移动设备上的资源有限,竞价代码应遵循以下准则:
- 代码应在预定义的时间段内执行完毕。此约束条件将统一应用于所有买方广告网络。此约束条件的详细信息将在后续更新中分享。
- 代码必须保持独立,不得包含任何外部依赖项。
由于竞价代码(例如出价逻辑)可能需要访问应用安装来源等用户私人数据,因此运行时将不提供网络或存储空间访问权限。
编程语言
广告技术平台提供的竞价代码应使用 JavaScript 编写。 这样一来,广告技术平台便可执行诸多操作,例如在支持 Privacy Sandbox 的平台上共享出价代码。
赢得广告呈现机会
得分最高的广告将被视为竞价胜出方。在此初始方案中,胜出的广告将传递到 SDK 中进行呈现。
我们的计划是要改进此解决方案,确保应用或 SDK 无法通过与胜出的广告相关的信息来确定与用户的自定义受众群体成员资格或应用互动记录相关的信息(类似于 Chrome 的围栏框架方案)。
展示次数报告
广告呈现后,系统即可将胜出的展示报告回参与竞价的买方和卖方平台。平台将按以下顺序调用报告逻辑:
- 卖方报告。
- 买方报告。
这样一来,买方和卖方平台就能够将重要的设备端信息(例如出价信息、自定义受众群体名称等)发回服务器,以启用实时预算、出价模型更新和精确的结算工作流程等功能。此展示报告支持是对 Attribution Reporting API 的补充。
卖方报告
平台将调用供应方提供的代码(从卖方在 selectAds()
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_signals
和per_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 的平台和网页使用通用的可信键值对类型服务器。