什么是 Attribution Reporting API?它如何在保护隐私的前提下跟踪广告转化?

解读

在国内 Android 面试中,这道题考察的是候选人对“隐私沙盒(Privacy Sandbox)”最新广告归因方案的掌握程度。
面试官通常想听到三层信息:

  1. 它与传统“设备级标识符归因(IMEI/GAID)”的本质区别;
  2. 技术实现上如何把“点击/浏览事件”与“转化事件”做匹配,同时避免任何一方拿到原始用户标识;
  3. 对国内多渠道包、OAID、MMP(AppsFlyer、TalkingData 等)现有归因链路的潜在冲击与落地难点。
    回答时务必把“无跨应用身份追踪、延迟聚合、差分隐私噪音”三个关键词抛出来,再补一句“国内 OAID 合规化也在向类似思路靠拢”,即可体现视野深度。

知识点

  1. 隐私沙盒整体定位:取代 GAID、第三方 Cookie 的“后标识符”解决方案之一。
  2. 双路径归因:
    • Event-level:少量精细归因,带 1% ~ 10% 随机噪音,仅支持 1 个转化;
    • Aggregatable:加密向量上传,经可信聚合服务返回加总结果,可支持 3 个不同维度的汇总。
  3. 关键数据结构:
    • Source 注册(广告点击/浏览)→ 生成 source_event_id、filter_data、expiry;
    • Trigger 注册(应用安装、下单、加群)→ 生成 trigger_data、value、filters;
    • 浏览器或系统本地完成匹配,生成加密的归因报告(Attribution Report)。
  4. 隐私保护机制:
    • 无跨应用标识:全程使用 64/128 bit 随机事件 ID,不含 GAID、OAID、IMEI;
    • 延迟发送:随机延迟 2~30 小时,防止时序侧信道;
    • 差分隐私:Aggregatable 路径在可信服务器加 0 ~ 65535 的随机噪音;
    • 频次与容量限制:单设备每天最多 100 个 source、20 个 trigger,防止指纹滥用。
  5. 国内落地差异:
    • 国内渠道包通常不走 Google Play,需要把“AdServices”Jetpack 库(androidx.ads:ads-adservices) 预置进 APK,并在 Android 13+ 设备上声明 ACCESS_ADSERVICES_ATTRIBUTION 权限;
    • 与 OAID 归因并行期:目前主流 MMP 提供“GAID → Attribution Reporting”双方案,后台按优先级回退;
    • 合规审计:国内隐私合规评估要求把“归因加密密钥”与业务数据分库存储,满足《个人信息保护法》最小必要原则。

答案

Attribution Reporting API 是 Android 隐私沙盒推出的“无标识”广告归因方案,用来在设备端完成“广告点击/浏览”与“应用内转化”的匹配,并向广告主回传加密的归因报告,全程不使用 GAID、OAID 或任何跨应用用户标识。
其核心流程分三步:

  1. 注册 Source:广告 SDK 在点击或展示时调用 registerSource(),系统生成随机 source_event_id 并记录有效期、广告渠道等元数据;
  2. 注册 Trigger:应用在用户安装、付费或加购时调用 registerTrigger(),系统同样生成随机 trigger_data;
  3. 本地匹配与报告:系统根据 source_priority、filter_data、expiry 等策略在本地完成归因,随后把结果加密,并随机延迟 2~30 小时上传至广告主或 MMP 的聚合服务器。
    隐私保护手段包括:
  • 事件级报告仅返回 1 个转化且附加 1%~10% 随机噪音;
  • 汇总级报告使用同态加密向量,服务器只能拿到加总结果,无法还原单用户行为;
  • 全程无设备标识、无时序关联,杜绝跨应用追踪。
    在国内落地时,需要在 APK 中集成 AdServices 库,并在 Android 13+ 声明新权限;同时与现有 OAID 归因链路并行,通过 MMP 后台统一拼接,实现“隐私合规”与“投放 ROI”双赢。

拓展思考

  1. 如果广告主希望把“次留”也纳入归因,但 Attribution Reporting API 的事件级路径只能回传 1 个转化,该如何设计?
    思路:利用 Aggregatable 路径,把“安装”与“次日打开”分别作为两个不同的 trigger,并在聚合服务器按 campaign 维度加总,再计算次留率;同时把 trigger_data 的低位 bit 用作事件类型标识,实现多转化点的汇总统计。
  2. 国内厂商 ROM 对 AdServices 支持度不一,如何降级?
    方案:在运行时通过 ExtensionVersion.getVersion() 判断设备是否支持,若不支持则回退到 OAID + 模糊化时间戳(随机±6 小时)的“半匿名”归因,并在隐私政策中明确告知用户。
  3. 差分隐私噪音对 ROI 计算的影响如何量化?
    经验:Aggregatable 路径的噪音量 ε=64,换算到订单金额约为 ±5% 相对误差;广告主可把“预算消耗”与“汇总收入”放在同一置信区间做对比,或采用 7 天滑动平均来抵消随机波动。