我们最近宣布,我们增强了 Play Integrity API 判定,使其速度更快、更能抵御攻击,并为用户提供更出色的隐私保护,同时还进行了其他安全改进。
变更摘要
您可以在本文档的后半部分找到有关这些变更的详细摘要和常见问题解答。2025 年 5 月的判决变更如下:
是什么 | 具体变化 | 估算的影响* | 哪些设备 |
---|---|---|---|
影响所有发出 Play Integrity API 请求的开发者的变更 | |||
设备判定响应:meets-device-integrity | 必须具有硬件支持的肯定性启动时验证判决 | 影响极小,因为 Play Integrity API 已在搭载 Android 13 或更高版本的设备上使用由硬件支持的安全信号(约占 0.4%) | Android 13 及更高版本 |
应用完整性响应:应用识别判定 | 没有变化 | 影响极小,与设备判定结果的变化幅度 (~0.4%) 相当 | Android 13 及更高版本 |
账号详情响应:Play 许可判定 | 请求应用必须由 Google Play 安装或更新 | 许可回答略有减少(约 2.5%) | Android 6 及更高版本 |
仅影响使用可选功能的 Play 管理中心开发者和 Play SDK 管理中心开发者的变更 | |||
设备判定响应:meets-basic-integrity | 必须具有 Android 平台密钥认证,但启动状态可以是已验证或未验证 | 基本回答略有减少(约 0.4%) | Android 13 及更高版本 |
设备判定响应:meets-strong-integrity | 必须在过去一年内进行过安全更新 | 强响应减少(约 14.5%) | Android 13 及更高版本 |
所有可选信号(设备属性除外)** | 请求应用必须由 Google Play 安装或更新 | 包含可选信号的响应百分比有所下降(约 7%) | Android 13 及更高版本 |
*前面提到的所有估计影响百分比均基于平均值,不同的应用可能会出现较小或较大的变化,具体取决于其安装用户群。
**可选信号(设备属性除外)包括:meets-basic-integrity
、meets-strong-integrity
、近期的设备活动、设备召回(Beta 版)、Play 保护机制状态和应用访问风险。
常见问题解答
概览
什么是 Play Integrity API?
Play Integrity API 可帮助您通过获取有关设备、应用和用户的信息来评估用户应用环境的可信度,以便您检测并应对潜在的滥用行为和攻击。
Play Integrity API 提供哪些信号?
Play Integrity API 包含发出请求的应用的身份信息、发出请求的应用是否是通过 Google Play 安装的,以及设备是否为正版且经过认证的 Android 设备。默认情况下,系统会提供这些信号。您可以在应用的后端服务器上读取这些信号,并决定应用是否应做出响应以及应如何响应。Google Play 开发者可以选择在 Play 安装中接收其他信号,以便查看更多信息。
什么是 Android 平台密钥认证?
借助 Android 平台密钥认证,应用可以验证设备的状态,并获得由硬件提供支持的启动完整性保证这一强有力的信号。它依赖于 Google 在设备的硬件支持的密钥库中预配的密钥。Play Integrity API 已经使用密钥认证在某些设备上获取由硬件支持的安全信号,现在将在所有搭载 Android 13 或更高版本的设备上更深入地集成这些信号。
判决变更
Android 13 或更高版本设备上的 Play Integrity API 判定发生了哪些变化?
Play Integrity API 现在要求所有完整性判定都必须有由硬件支持的安全信号:
meets-device-integrity
设备识别判定结果表明,应用所运行的设备是经过认证的正品 Android 设备。此判决将要求设备引导加载程序处于锁定状态,并且加载的 Android OS 是经过认证的设备制造商映像。meets-strong-integrity
设备识别判定表示设备是正品且经过认证的 Android 设备,并已安装最新的安全更新。此判定结果要求设备的所有分区(包括 Android OS 分区补丁和供应商分区补丁)在过去一年内都必须有meets-device-integrity
和安全更新。此条件可能会在将来发生变化。meets-basic-integrity
设备识别判定结果表明检查是在实际的 Android 设备上进行的。设备引导加载程序可以锁定或解锁,启动状态可以是已验证或未验证。该设备可能未经认证,在这种情况下,Google 无法提供任何安全、隐私或应用兼容性保证,也无法保证该设备不会充当代理(例如 Android 虚拟实例的代理)。这也意味着,只要存在密钥认证,已取得 root 权限的设备就可以返回meets-basic-integrity
。
这些更改不会影响 Play Games 电脑版上的 Play Integrity API,该 API 将继续返回 meets-virtual-integrity
。
为什么在 Android 13 或更高版本的设备上,Play Integrity API 判定发生了变化?
在 Android 12 及更低版本上,Play Integrity API 部分使用了由硬件支持的安全信号。通过要求在 Android 13 及更高版本上启用由硬件支持的安全功能,Play Integrity API 判定机制可更有效地抵御攻击者,为应用提供更出色的性能,并为用户提供更出色的隐私保护。开发者可以期待搭载 Android 13 或更高版本的设备上实现以下改进:
- 需要收集和评估的设备信号减少了约 90%,从而在 Google 服务器上生成默认判定结果。可选信号仍需要收集其他信号。
- 最坏情况下的标准请求的判决延迟时间缩短了最多 80%,所有获取默认判决的经典请求的判决延迟时间缩短了最多 80%。可选信号可能会增加延迟时间。
- 可靠性水平一致,支持所有 Android 设备规格,包括手机、平板电脑、可折叠设备、电视、Android Auto 设备、Wear OS 设备和 ChromeOS 设备。
- 设备识别判决中每个设备标签之间的区分度更高:
meets-strong-integrity
、meets-device-integrity
和meets-basic-integrity
。
Play Integrity API 对 Google Play 游戏电脑版的判定不会发生变化,在 Android 12 及更低版本上与在 Android 13 及更高版本上相同。
如何更新应用的后端逻辑,使完整性判定结果能够将 Android SDK 版本纳入考虑范围?
如果您想根据 Android SDK 版本在应用的后端服务器上使用不同的逻辑,可以使用判定中的新设备属性字段。以下示例展示了如何做到这一点:
Kotlin
val deviceIntegrity = JSONObject(payload).getJSONObject("deviceIntegrity") val sdkVersion = if (deviceIntegrity.has("deviceAttributes")) { deviceIntegrity.getJSONObject("deviceAttributes").getInt("sdkVersion") } else { 0 } if (sdkVersion >= 30) { // Provide Android R+ specific experience to the user. }
Java
JSONObject deviceIntegrity = new JSONObject(payload).getJSONObject("deviceIntegrity"); int sdkVersion = deviceIntegrity.has("deviceAttributes") ? deviceIntegrity.getJSONArray("deviceAttributes").getInt("sdkVersion") : 0; if (sdkVersion >= 30) { // Provide Android R+ specific experience to the user. }
如何在所有 Android SDK 版本中使用旧的 meets-strong-integrity
标签定义?
为此,您可以更新应用的后端逻辑,使其在设备搭载 Android 13 之前的版本时使用 meets-strong-integrity
,在设备搭载 Android 13 或更高版本时使用 meets-device-integrity
,并使用判定中包含 Android SDK 版本的新设备属性字段。以下示例展示了如何做到这一点:
Kotlin
val deviceRecognitionVerdict = if (deviceIntegrity.has("deviceRecognitionVerdict")) { deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() } else { "" } val deviceIntegrityToCheckFor = sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY"; if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) { // Looks good! }
Java
JSONObject deviceIntegrity = new JSONObject(payload).getJSONObject("deviceIntegrity"); String deviceRecognitionVerdict = deviceIntegrity.has("deviceRecognitionVerdict") ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString() : ""; String deviceIntegrityToCheckFor = sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY"; if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) { // Looks good! }
由于它也是一种硬件支持的信号,因此在搭载 Android 13 及更高版本的设备上,设备属性字段最为可靠。
还做出了哪些其他判决更改?
我们会持续投资,以提高 Play Integrity API 中现有信号的可靠性,并定期推出新功能,帮助开发者应对新出现的威胁和新的使用情形。我们还对判决功能进行了其他改进,包括:
- Play 许可响应:为了返回 Play 许可响应,Play Integrity API 现在始终要求请求应用通过 Google Play 进行安装或更新。这样可以修复一些极端情况,并使开发者更容易解读响应。
- 可选信号可用性:现在,使用 Google Play 管理中心或 Play SDK 管理中心的开发者可使用的所有可选信号(设备属性除外)都要求请求的应用已由 Google Play 在 Android 13 或更高版本上安装或更新。这包括
meets-strong-integrity
、meets-basic-integrity
、近期设备活动、设备回想(Beta 版)、应用访问风险判定和 Play 保护机制判定。我们标准化了所有其他 Play Integrity API 请求,以接收设备检查(仅带有meets-device-integrity
标签)、安装程序检查、应用完整性检查和设备属性(如果已启用)。 - 针对特定设备的判定变更:Play Integrity API 会在更多场景下自动更改设备判定,以便在所有 Android SDK 版本中更早地保护应用,例如在发现过度活动或密钥泄露的证据时。这包括在硬件支持的信号不可用时,Play 能够回退到其他信号,为用户生成临时设备判定的功能。建议开发者使用应用内 Play 补救对话框或引导用户前往 Play 商店应用来解决完整性判定问题。随着时间的推移,这些对话框将处理更多场景,并包含针对用户的具体指导,根据用户的特定设备或账号告知他们需要修复的问题。
如何报告完整性判定方面的问题?
如需报告 Play Integrity API 响应方面的问题(无论是历史判定还是新判定方面的问题),请按照支持页面上的说明操作。
可用性
Play Integrity API 需要哪些条件才能正常运行?
Play Integrity API 要求设备上安装 Google Play 商店和 Google Play 服务,包括 Android 设备和 Google Play Games 电脑版。经典请求要求使用 Android 4.4(API 级别 19)或更高版本,标准请求要求使用 Android 5.0(API 级别 21)或更高版本。在搭载 Android 13(API 级别 33)及更高版本的设备上,Play Integrity API 现在在所有 Android 设备外形规格(包括手机、平板电脑、可折叠设备、电视、Android Auto 设备、Wear OS 设备和 ChromeOS 设备)上都具有相同的可靠性和支持级别,并提供关键的证明。
为什么 Play Integrity API 会针对不同的设备给出不同的判定?
Play Integrity API 提供多种设备判定,以满足具有不同使用情形和风险容忍度的开发者的需求,并实现分层强制执行策略。例如,当应用和设备更受信任时,开发者可以简化用户验证步骤;而当设备未知时,开发者可能需要先进行额外的用户验证,然后才能执行受保护的敏感操作。这可以有效减少滥用和攻击行为。
什么是经过认证的 Android 设备?
经过认证的 Android 设备(也称为已获得 Play 保护机制认证的 Android 设备)是指运行可预测软件的设备,该设备已通过 Google 的数百项兼容性测试,遵循 Android 安全和权限模型,并且随附 Google Play 保护机制套件的恶意软件防范功能。当 Play Integrity API 能够验证设备是正版且经过认证的 Android 设备时,它会在设备识别判定中返回 meets-device-integrity
响应。
什么是 meets-basic-integrity
设备?
Play Integrity API 还在设备判定中返回一个可选的响应,即 meets-basic-integrity
。如果设备仅返回 meets-basic-integrity
判定,而不返回 meets-device-integrity
或 meets-strong-integrity
,则表示 Android 操作系统无法验证,但存在密钥认证。这表示检查是在实体 Android 设备上进行的,但 Google 无法保证该设备的安全性、隐私保护或应用兼容性,也无法保证该设备不会充当代理(例如,对于 Android 的虚拟实例)。开发者可以根据自己的使用情形和风险承受能力,决定希望应用在这些设备上以何种方式运行。
任何开发者都可以使用 Play Integrity API 吗?
可以,任何 Android 开发者都可以发出 Play Integrity API 请求,以接收默认的完整性判定结果。无论分发渠道如何,每天的使用量上限为 1 万次请求。除了任何其他发布渠道之外,还在 Google Play 上发布应用的开发者也可以申请提高每日配额。
任何开发者都可以使用 Android 平台密钥认证吗?
可以。任何 Android 开发者都可以使用 Android 平台密钥证明来获取密钥证明记录,并使用 Google 证明根密钥的公共证书来验证该记录。Play Integrity API 可为开发者带来密钥认证和其他功能的好处,而无需他们自行集成密钥认证,从而避免了复杂的流程。
违规处置
开发者如何使用 Play Integrity API 判定结果?
开发者可以自行决定是否以及如何使用 Play Integrity API 判定。有些开发者会收集信号以进行内部反滥用分析,而另一些开发者则会根据判决结果来决定其应用的行为。例如,开发者可以决定要求可信度较低的设备在创建账号时执行额外的用户验证步骤;或者可以决定让可信度较低的设备在同一多人游戏服务器上一起玩游戏。
Play Integrity API 是否会屏蔽用户或设备?
不会,Play Integrity API 本身不会阻止对任何功能的访问。 这是一项可选的开发者服务,可提供信号,开发者可以选择如何根据这些信号采取行动。
如果用户的设备未能通过 Play Integrity API 设备检查,该怎么办?
用户可以在设备上前往 Play 商店应用,打开“设置”菜单,向下滚动到“关于”,然后在“Play 保护机制认证”下查看相关信息。如果其设备的 Play 保护机制认证存在问题,系统会显示一个按钮,供用户按下来尝试解决问题。这样会刷新设备的认证状态,并针对需要修正的问题提供具体指导。