隐私合规工程化(上):数据映射、权限最小化、同意流程与删除接口
合规不是写一篇隐私政策就完事,而是要在代码里落地。这一课讲如何做数据收集映射表与 SDK 清单、权限最小化、首启同意弹窗的正确工程实现、iOS/Google 隐私表单怎么填,以及账号注销与数据删除接口怎么设计
- 会做数据收集映射表与 SDK 清单,作为所有隐私表单和合规的事实来源
- 掌握权限最小化原则与「用时申请」的工程做法
- 正确实现首启隐私授权流程:未同意不采集、可拒绝、状态可追溯
- 会设计账号注销与个人数据删除/导出接口,能填 iOS/Google 隐私表单
隐私合规的事实来源:先搞清你到底收了什么
无论国内检测、苹果隐私标签还是 Google Data Safety,问的都是同一件事:你的 App 收集哪些数据、为什么收、是否共享、用户能否删除。很多驳回是因为开发者自己都没盘清——尤其漏算了第三方 SDK 采集的数据。所以工程化的第一步不是写弹窗,而是建立一张「数据收集映射表」,把事实查清楚,之后所有表单、隐私政策、代码控制都以它为准。
数据收集映射表与 SDK 清单
设备标识· 在哪收集:启动时· 用途:风控 / 统计· 是否第三方 SDK 采集:是(统计 SDK)· 是否必需:否· 存储位置:服务端· 保留时长:30 天· 用户可否删:可 学习进度· 在哪收集:使用中· 用途:核心功能· 是否第三方 SDK 采集:否(自有)· 是否必需:是· 存储位置:数据库· 保留时长:长期· 用户可否删:随注销 邮箱· 在哪收集:注册时· 用途:登录 / 找回· 是否第三方 SDK 采集:否(自有)· 是否必需:否· 存储位置:数据库· 保留时长:长期· 用户可否删:可改 / 删 定位· 在哪收集:某功能时· 用途:就近推荐· 是否第三方 SDK 采集:是(地图 SDK)· 是否必需:否· 存储位置:不落地· 保留时长:-· 用户可否删:不存 SDK 清单:逐个登记每个 SDK 的名称 / 版本 / 收集数据 / 隐私政策链接 / 初始化时机
你集成的统计、推送、地图、崩溃上报、广告 SDK 会在自己初始化时采集设备信息,即使你没主动写。做法:逐个看 SDK 文档的「个人信息收集清单」,全部计入映射表;并把它们的初始化统一收口到一个地方、用开关控制,确保用户同意前一个都不启动。这张表同时是 Data Safety、隐私标签、国内隐私检测的共同答案,一次盘点多处复用。
权限最小化与「用时申请」
权限原则:只申请功能真正需要的权限、能不用就不用、在用户用到对应功能时才弹系统授权(而不是 App 一启动就索要一堆)。启动即索权、索权与功能无关是高频驳回点。
国内对设备标识管控严格:Android 上 IMEI/MAC/Android ID 等持久硬件标识的获取受到系统限制,需要统计归因时优先使用厂商提供的可重置广告标识(如 OAID)。能用弱标识、可重置标识解决的,就不要碰强硬件标识。
首启隐私授权流程的正确实现
首启同意流程(工程状态机)
冷启动
├─ 读取本地「隐私同意状态」(未知/已同意/已拒绝)
├─ 未知 -> 弹隐私弹窗(隐私政策/用户协议链接),此时:
│ · 不初始化任何采集类 SDK、不发统计请求、不读敏感标识
│ · 「同意」-> 存状态=已同意 -> 再统一初始化 SDK
│ · 「拒绝」-> 存状态=已拒绝 -> 仅保证核心功能,不采集
├─ 已同意 -> 正常初始化
└─ 已拒绝 -> 不采集;在相关功能处可再次说明后请求,不骚扰式反复弹
要点:状态持久化、同意版本可追溯(政策更新需重新征得同意)、拒绝有可用路径国内合规检测工具会动态监测:从进程启动到用户点击「同意」之间,App 是否发起了采集请求、是否初始化了统计/推送/设备指纹 SDK。很多 App 界面上有弹窗,但 SDK 在 Application 启动阶段就已经悄悄初始化并联网——这必被判违规。技术上要把所有第三方初始化从「应用启动即执行」改为「同意回调后才执行」,并用抓包工具在未同意状态下确认零采集请求。
账号注销与数据删除/导出接口
国内要求提供账号注销路径,GDPR/CCPA 要求可删除(被遗忘权)和可导出,这些要在服务端做成真正的能力,而不只是前端一个按钮:
数据删除的工程要点
① 端上:设置里有「注销账号/删除数据」入口,说明后果并二次确认
② 服务端删除接口(鉴权):
- 定位该用户在所有表里的数据(主表/进度/日志/缓存/第三方)
- 级联删除或匿名化(去掉身份关联、保留去标识的聚合统计)
- 处理备份中的删除(随备份轮换过期,或记录删除墓碑)
③ 撤销第三方上的数据(如已推送的统计/CRM)
④ 导出接口:把用户数据打包为通用格式提供下载(对应可携带权)
⑤ 全程幂等、有操作记录;删除是状态流转/级联,不是只删一行用户表「删除」和「匿名化」的区别(选学)
删除是让数据不可再用;匿名化是去除个人身份关联、使数据无法再识别到特定个人(且不可逆),匿名化后的聚合数据可用于统计。注意「假名化」(用 ID 代替姓名、但保留可还原映射)在多数法规下仍算个人数据。设计时区分:交易/合规要求留存的记录按法定期限保留并解除与普通画像的关联,其余个人数据真正删除或不可逆匿名化。具体留存期限以适用法律和法务意见为准。
关于首启隐私合规,下列工程实现正确的是?
本节小结
隐私工程化第一步是数据收集映射表(数据类型/收集点/用途/是否第三方/必需性/存储/保留/可否删)+SDK清单(名称版本采集隐私政策初始化时机),它是国内检测、苹果隐私标签、Google Data Safety的共同事实来源,第三方SDK采集最易漏。权限最小化:只收必要、用时申请、拒绝后核心可用、用OAID等可重置弱标识替代IMEI等强标识。首启同意状态机:未知才弹窗、未同意不初始化采集SDK不联网、同意后统一初始化、拒绝仅核心功能、状态持久化且政策更新重新征得同意,用抓包验证同意前零请求。注销/删除要服务端级联删除或不可逆匿名化全表数据、处理备份与第三方、提供导出、幂等留痕;区分删除/匿名化/假名化。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
versionName 是给用户看的版本名,versionCode(构建号)只能单调递增、绝不回退,构建时间要和服务端升级清单一致。线上包、归档包、OTA 包必须用同一签名,并把文件大小和哈希(如 MD5/SHA)写进服务端元数据;客户端下载完成先校验哈希再安装,能从根上杜绝「下到一半的坏包被安装」。每次发版把这几项列成清单逐项核对。