3. 用户同意管理:从设计到信号传递

用户同意管理,说白了就是解决一个问题——用户到底允不允许你收他的数据。这件事做不好,GDPR 罚你 4% 全球营收,国内个保法也能让你吃不了兜着走。我这些年经手的合规项目,十有八九的整改都跟同意管理有关。

这一节我们拆成三块来讲:同意采集机制怎么设计、CMP 怎么选型和集成、以及同意信号怎么在生态里传递(TCF / GPP)。嗯,咱们一个一个来。

3.1 同意采集机制设计

先问一个问题:你见过那种「我同意」按钮比「拒绝」按钮大两倍的弹窗吗?我见过,而且不止一次。这种设计在合规上其实很危险。

核心原则:同意必须是自由给予、具体、知情、且可撤回的。任何「默认勾选」或「强迫同意」都是雷区。

我个人习惯把同意采集机制拆成四个步骤:

  1. 触发时机——用户首次访问 App / 网页时,必须在任何数据收集行为之前弹出。
  2. 信息展示——清晰说明收集哪些数据、用于什么目的、第三方有哪些。
  3. 动作选择——「同意全部」「拒绝全部」「自定义设置」三个选项必须同时存在。
  4. 记录留存——每次同意/拒绝/撤回都要落日志,时间戳 + 用户标识 + 同意字符串。

我在项目中遇到过一种情况:产品经理说「用户拒绝后我们就不弹了,省得烦」。这其实是个大坑。拒绝后用户仍然有权随时改变主意,所以你需要保留一个「重新设置」的入口。我建议放在个人中心或者设置页的明显位置。

小技巧:同意记录不要只存「同意/拒绝」两个状态。存下完整的同意字符串(比如 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 是未来的方向,因为你的用户可能来自世界各地,一个协议搞定所有法规,省心很多。

信号传递的流程大致是这样的:

同意信号传递流程 用户 CMP 选择同意/拒绝 同意字符串 (TC String) 生成并存储 广告平台 数据分析平台 第三方 SDK 注意 每个下游平台必须 解析同意字符串 并遵守用户选择

实际对接时,我建议你关注两个关键点:

  • 信号传递的时机——必须在用户做出选择后立即传递,不能缓存旧的同意状态。
  • 信号失效的处理——如果用户撤回同意,下游平台必须在合理时间内(通常是 24 小时内)停止数据收集。

避坑指南:我曾经对接过一个广告 SDK,它只认 TCF v1,不认 v2。结果用户同意字符串传过去,它解析失败,直接当「未同意」处理。所以集成前一定要确认双方协议版本一致。

最后说一句:同意管理不是一次性的工作。法规在变,用户期望在变,你的 CMP 和信号协议也需要持续迭代。保持关注 IAB 的更新,定期做合规审计——这才是长久之计。