在浏览器控制台中调试 IAB GPP 字符串:分步教程
为什么 GPP 问题难以发现
当美国访客选择退出其数据的出售或共享时,这一选择必须到达页面上的每个广告伙伴。在 IAB 全球隐私平台(GPP)中,它以一个紧凑的字符串和一组部分 ID 的形式传递。如果其中任何一个出错 — 缺失、过时或携带了错误的部分 — 表面上不会有任何故障。广告照常加载,横幅看起来也正常,问题只会在之后显现出来:伙伴忽略退出选择,或者对你的库存出价降低。
好消息是,几乎所有内容都可以在浏览器控制台中检查。本教程按照我们在线上页面运行检查的顺序,逐步讲解这些检查。
步骤 1:确认 API 存在且已就绪
兼容 GPP 的 CMP 会暴露一个全局的 __gpp 函数。在你的页面上打开 DevTools,运行 ping 命令:
__gpp('ping', function (data) { console.log(data); });
返回的对象一眼就能告诉你很多信息:
- gppVersion — 当前实现应显示 1.1。
- cmpStatus — CMP 是否已加载或出现错误。
- cmpDisplayStatus — 横幅对该访客是可见、隐藏还是已禁用。
- signalStatus — CMP 确定同意状态后为“ready”,仍在判断时为“not ready”。
- supportedAPIs — CMP 能够生成的部分。
- applicableSections — 当前适用于该访客的部分 ID。
- gppString — 编码后的字符串本身。
如果 __gpp 未定义,说明 CMP 的 stub 缺失或加载过晚。stub 必须先于任何依赖它的广告脚本就位,否则这些脚本会看不到 CMP,要么等待,要么在没有信号的情况下继续。
步骤 2:检查适用的部分
GPP 中的每个隐私框架都有一个数字形式的部分 ID。发布商最常遇到的是 2(欧盟 TCF v2)、5(加拿大 TCF)、7(US National,“usnat”),以及从 8 开始的各州独立部分,例如加利福尼亚、弗吉尼亚、科罗拉多、犹他和康涅狄格。来自美国某州的访客,其 applicableSections 通常应显示全国部分或相应的州部分,而不是欧盟部分。
请从多个地点测试。一个常见的缺陷是:CMP 为横幅正确检测了地理位置,却无论如何都向字符串写入默认部分,或者相反。使用 VPN 或 CMP 的预览工具,对比横幅所显示的内容与 applicableSections 所报告的内容。
步骤 3:读取部分数据
与其手动解码字符串,不如向 CMP 请求已解析的部分:
__gpp('getSection', function (data, success) { console.log(data, success); }, 'usnat');
在 US National 部分中,退出字段使用一个简单的约定:0 表示不适用,1 表示用户已退出,2 表示用户未退出。请先关注这些字段:
- SaleOptOut 和 SharingOptOut
- TargetedAdvertisingOptOut
- 对应的 notice 字段,记录访客是否获得了每项做法的告知
现在在页面上执行退出 — 点击你的“Do Not Sell or Share”链接,或在偏好中心切换该设置 — 然后再次运行 getSection。退出字段应从 2 变为 1。如果没有,说明界面与信号不同步。
步骤 4:测试 Global Privacy Control 路径
多部州法律要求企业将 Global Privacy Control 信号视为退出。在支持 GPC 的浏览器或扩展中启用它,在控制台确认 navigator.globalPrivacyControl 返回 true,然后在全新会话中加载页面。即使访客没有触碰横幅,相关的退出字段也应该已经读取为 1。某些部分还包含一个字段,表明该选择来自 GPC 信号。
步骤 5:关注事件,而不只是快照
广告脚本不应只在页面加载时读取一次字符串就不再理会。注册一个监听器,看看伙伴所看到的内容:
__gpp('addEventListener', function (evt) { console.log(evt.eventName, evt.pingData); });
你应该会观察到 listenerRegistered、signalStatus 和 sectionChange 等事件。当访客更改选择时,随后应出现一个带有更新后字符串的 sectionChange 事件。如果你的 header bidding wrapper 或广告服务器集成只在 signalStatus 变为“ready”之前读取字符串,它可能会发送空值或过时的值。
步骤 6:沿着字符串追踪到广告请求
最后,打开 Network 面板并筛选你的广告请求。许多广告端点接受 gpp 和 gpp_sid 参数(字符串和适用的部分 ID)。请检查:
- 来自美国访客的请求中是否同时存在这两个参数;
- 字符串是否与请求发出时 ping 返回的字符串一致;
- 退出之后,后续请求携带的是新字符串,而不是缓存的旧字符串。
如果你使用 Prebid.js,请确认其同意管理模块已针对 GPP 配置,并检查从 wrapper 发出的竞价请求以及最终的广告服务器调用。
常见故障模式
- stub 晚于广告标签加载 — 伙伴完全看不到 CMP。
- 地区对应的部分错误 — 美国流量发送了欧盟部分,或者根本没有部分。
- 界面与信号不同步 — 开关变了,字符串没变。
- GPC 被忽略 — 浏览器信号从未成为退出。
- 请求中的字符串过时 — wrapper 缓存了它看到的第一个值。
核心要点
- 从 ping 开始:版本、状态、适用部分和字符串能说明大部分情况。
- 使用 getSection 读取退出字段;1 表示已退出,2 表示未退出。
- 分别测试退出链接和 GPC,并确认二者都会改变信号。
- 监听事件,并在广告请求读取字符串之前等待“ready”信号。
- 在退出前后,于真实的网络请求中验证 gpp 和 gpp_sid。