3. 用户同意管理:从设计到信号传递
用户同意管理,说白了就是解决一个问题——用户到底允不允许你收他的数据。这件事做不好,GDPR 罚你 4% 全球营收,国内个保法也能让你吃不了兜着走。我这些年经手的合规项目,十有八九的整改都跟同意管理有关。
这一节我们拆成三块来讲:同意采集机制怎么设计、CMP 怎么选型和集成、以及同意信号怎么在生态里传递(TCF / GPP)。嗯,咱们一个一个来。
3.1 同意采集机制设计
先问一个问题:你见过那种「我同意」按钮比「拒绝」按钮大两倍的弹窗吗?我见过,而且不止一次。这种设计在合规上其实很危险。
核心原则:同意必须是自由给予、具体、知情、且可撤回的。任何「默认勾选」或「强迫同意」都是雷区。
我个人习惯把同意采集机制拆成四个步骤:
- 触发时机——用户首次访问 App / 网页时,必须在任何数据收集行为之前弹出。
- 信息展示——清晰说明收集哪些数据、用于什么目的、第三方有哪些。
- 动作选择——「同意全部」「拒绝全部」「自定义设置」三个选项必须同时存在。
- 记录留存——每次同意/拒绝/撤回都要落日志,时间戳 + 用户标识 + 同意字符串。
我在项目中遇到过一种情况:产品经理说「用户拒绝后我们就不弹了,省得烦」。这其实是个大坑。拒绝后用户仍然有权随时改变主意,所以你需要保留一个「重新设置」的入口。我建议放在个人中心或者设置页的明显位置。
小技巧:同意记录不要只存「同意/拒绝」两个状态。存下完整的同意字符串(比如 TCF 的 tcstring),这样审计时能还原用户当时的选择。
3.2 CMP 选型与集成
CMP,全称 Consent Management Platform,就是帮你管用户同意的平台。市面上的 CMP 很多,选型时我一般看这几个维度:
| 维度 | 说明 | 我踩过的坑 |
|---|---|---|
| 合规覆盖 | 是否支持 GDPR、CCPA、中国个保法 | 有些 CMP 只做欧洲,国内合规要额外开发 |
| 信号协议 | 是否支持 TCF、GPP | 选错了后面 SDK 对接很痛苦 |
| 自定义能力 | UI 样式、语言、弹窗逻辑 | 有些 CMP 的 UI 改不了,跟 App 风格不搭 |
| 性能 | 加载速度、包体积 | 曾经有个 CMP 让 App 启动慢了 2 秒,被用户骂惨 |
| 审计日志 | 是否提供完整的同意记录导出 | 没有日志,监管来了你拿什么证明? |
集成方面,我建议走 SDK 方式而不是纯 WebView。SDK 可以更精准地控制弹窗时机,也能跟原生埋点 SDK 做深度联动。举个例子:
// 伪代码:CMP 初始化 + 获取同意状态
CMPManager.init({
: 'your_',
region: 'CN', // 中国区
protocol: 'TCFv2', // 使用 TCF v2 协议
onConsentReady: (consentString) => {
// 将 consentString 传给埋点 SDK
TrackingSDK.setConsent(consentString);
}
});
嗯,这里要注意:CMP 的初始化必须放在所有数据收集代码之前。我曾经见过一个项目,CMP 还没初始化完,埋点 SDK 已经开始发数据了——这等于先斩后奏,合规上直接不合格。
警告:不要为了省事把 CMP 弹窗做成「一次性」。用户删除 App 重装、或者清除浏览器缓存后,必须重新征求同意。这是监管检查的重点。
3.3 同意信号传递:TCF 与 GPP
同意信号怎么在广告平台、数据分析平台、第三方 SDK 之间传递?这就靠协议了。目前主流的有两个:TCF(Transparency & Consent Framework)和 GPP(Global Privacy Platform)。
TCF 是 IAB Europe 推的,主要服务 GDPR 场景。它定义了一套标准化的同意字符串(TC String),里面编码了用户对每个目的(Purpose)和供应商(Vendor)的选择。我举个例子:
// TCF 字符串示例(简化版)
// 格式:版本号.创建时间.同意目的位图.供应商位图...
// 实际字符串很长,这里只展示结构
const tcString = 'CPXxRfAPXxRfAAGABCENCgCgAAAAAAEAABAAA...';
GPP 是 IAB Tech Lab 推的,目标是覆盖全球多个法规(GDPR、CCPA、LGPD 等)。它比 TCF 更灵活,支持多 jurisdiction。我个人觉得 GPP 是未来的方向,因为你的用户可能来自世界各地,一个协议搞定所有法规,省心很多。
信号传递的流程大致是这样的:
实际对接时,我建议你关注两个关键点:
- 信号传递的时机——必须在用户做出选择后立即传递,不能缓存旧的同意状态。
- 信号失效的处理——如果用户撤回同意,下游平台必须在合理时间内(通常是 24 小时内)停止数据收集。
避坑指南:我曾经对接过一个广告 SDK,它只认 TCF v1,不认 v2。结果用户同意字符串传过去,它解析失败,直接当「未同意」处理。所以集成前一定要确认双方协议版本一致。
最后说一句:同意管理不是一次性的工作。法规在变,用户期望在变,你的 CMP 和信号协议也需要持续迭代。保持关注 IAB 的更新,定期做合规审计——这才是长久之计。