Google 的 Play Integrity API 替代 SafetyNet,设备认证兼容性

Google 的 Play Integrity API 替代 SafetyNet,设备认证兼容性

Google 的 Play Integrity API 替代 SafetyNet,设备认证兼容性


Google 的 Play Integrity API 替代 SafetyNet,设备认证兼容性


2024 年初,SafetyNet Attestation API 彻底停止响应。对那些还在客户端里直接解析 ctsProfileMatchbasicIntegrity 的老旧代码来说,这不是一个平滑过渡,而是一次强制断电。很多开发者直到收到 Google Play Console 的迁移警告邮件,才意识到原来那个返回 JSON 字符串、可以在客户端直接判断真伪的 SafetyNet,已经被一个加密的、必须经服务端二次验签的 Play Integrity Token 所取代。更麻烦的是,这次替换带来的兼容性冲击,远比 Google 官方文档里那句"无缝迁移"要血腥得多。


SafetyNet 的强制下线与 Play Integrity 的仓促接棒


SafetyNet 从 2013 年前后推出,到 2024 年彻底关闭,活了十年出头。它最初的设计意图很简单:让开发者能区分一台设备是"经过 Google 认证的 Android 设备"还是"被篡改过的玩具"。早期它返回一个清晰的 JSON,里面两个布尔值最关键:ctsProfileMatch 表示这台机子是否通过了兼容性测试套件(CTS),basicIntegrity 表示设备是否存在明显的系统级篡改。很多中小开发者甚至直接在 App 客户端里判断这两个字段,虽然这违背了 Google 自己的安全建议——因为客户端校验根!本!没!用!——但架不住实现成本极低,调个 Google Play Services 的 API,解析个 JSON,五分钟就能集成完。


Google 在 2022 年年中宣布 SafetyNet 进入弃用流程,给出的理由是它的客户端响应容易被中间人攻击和伪造,且无法有效应对越来越复杂的 root 方案。替代者 Play Integrity API 在架构上确实更严谨:客户端向 Google Play 服务请求一个一次性的加密令牌(token),这个 token 是加密的,客户端无法解读;随后必须由开发者的后端服务器拿着这个 token,再去调用 Google Play Developer API 进行解密和验证。Google 的愿景是建立一个端到端的信任链,让客户端无从伪造。


问题出在时间线和迁移策略上。Google 给了一年半的缓冲期,听起来充裕,但对于已经深度依赖 SafetyNet 的存量应用,这几乎意味着要重写整个设备认证的后端链路。SafetyNet 的响应可以在客户端即时得到结果,很多应用的业务逻辑(比如是否显示支付入口、是否允许登录)高度耦合在这个同步调用里。切换到 Play Integrity 后,必须异步走一趟服务器,延迟增加了,架构复杂度翻倍了,而且对于那些没有后端服务器的纯客户端应用——比如某些独立开发者的单机

SQLDelight 的类型安全 SQL,在 Android 项目中的使用 2026-08-24
AI 写代码越来越猛,Android 开发会被取代吗 2026-08-24

评论区