Play Integrity API 概览

Play Integrity API 有助于保护您的应用和游戏,使其免受可能存在风险的欺诈性互动(例如欺骗和未经授权的访问)的危害,让您能够采取适当措施来防范攻击并减少滥用行为。

当您的应用或游戏在搭载 Android 4.4(API 级别 19)或更高版本的设备上使用时,Play Integrity API 会提供已签名且加密的响应,其中包含以下信息:

  • 正版应用二进制文件:确定您是否正在与 Google 可识别的未经修改的二进制文件进行互动。
  • 正规 Play 安装:确定当前用户帐号是否已获得许可,这意味着用户在 Google Play 上安装或购买了您的应用或游戏。
  • 正品 Android 设备:告知您应用是否正在由 Google Play 服务提供支持的正品 Android 设备上运行。

服务条款和数据安全

访问或使用 Play Integrity API 即表示您同意接受 Play Integrity API 服务条款。请先阅读并了解所有适用的条款及政策,然后再访问该 API。

Google Play 有一个“数据安全”部分,供开发者披露其应用的数据收集、分享和安全做法。为了满足“数据安全”部分的要求,请参阅有关 Play Integrity API 如何处理数据的信息。

安全注意事项

虽然 Play Integrity API 可以增强安全性并防止篡改,但只有遵循以下各项推荐做法,才能让它为您的应用带来最大价值:

制定反滥用策略

将 Play Integrity API 与其他信号一起使用时,让其作为整体反滥用策略的一部分,而不是作为唯一的反滥用机制,这时该 API 效果最佳。请针对您的应用结合使用该 API 以及其他相关的安全性最佳实践

请勿过于频繁地获取完整性令牌

生成完整性令牌会耗费时间、数据流量和电池电量,而且每个应用每天可调用的次数上限由其使用量水平定义。因此,您应调用该 API 来保护不常执行的重要操作,此类操作是用户体验不可或缺的一部分,例如登录服务或加入多人游戏服务器。您不应针对高频或非重要操作调用该 API。例如,不要在每次应用转到前台时都调用,也不要在后台每隔几分钟调用一次。如果应用发出过多的 API 调用,则可能会受到限制,从而保护用户免受不正确实现的影响。

使用 Nonce 字段进一步保护应用

Play Integrity API 提供了一个名为 nonce 的字段,可用于进一步保护应用免受某些攻击的侵害,如重放攻击和中间人 (PITM) 篡改攻击。Play Integrity API 会在带签名的完整性响应中返回您在此字段中设置的值。请严格遵守关于如何生成 Nonce 的指南,以保护应用免遭攻击。

使用安全的服务器环境

在安全的服务器环境中执行所有解密和验证操作。如果您的客户端应用公开了任何安全详细信息,攻击者便可以从您的 APK 或代码库中提取这些信息,使他们能够掌握关于您的应用或游戏的重要信息。

从服务器向应用发送一系列响应

不要每次都从服务器向应用发回相同的二元通过/失败响应,最好发送一系列决策结果,因为这样更难复制。例如,您可以使用一系列相关的响应,如“允许”“允许但有限制”“reCAPTCHA 完成后允许但有限制”和“拒绝”。

采用分层强制执行策略

在 Play 管理中心内,您可以选择接收其他设备标签,以便制定具有多个强制执行层级的反滥用策略。在您选择接收其他标签后,如果满足所有标签条件,完整性响应就会包含针对同一设备的多个标签。因此,您可以准备您的后端服务器,使其根据可能的响应范围表现出不同的行为。

例如,与仅返回 MEETS_BASIC_INTEGRITY 的设备相比,返回 MEETS_BASIC_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_STRONG_INTEGRITY 的设备可能更可信。您可以相应地配置服务器的响应。这可以与关于用户帐号是 LICENSED 还是 UNLICENSED 的不同操作结合使用。

使用指数退避算法重试

环境条件(例如互联网连接不稳定或设备过载)可能会导致设备完整性检查失败。这样可能会导致系统不为本来可信的设备生成任何标签。为了缓解这些情况,请务必包含使用指数退避算法进行重试的选项。

显示可执行操作的错误消息

尽可能向用户提供有用的错误消息,并告诉用户可以采取什么措施来解决问题,例如重试、启用互联网连接或检查 Play 商店应用是否为最新版本。

针对意外问题或服务中断制定计划

Play 状态信息中心会显示有关 Play Integrity API 服务状态的信息,以及任何服务暂停和中断的相关信息。您可以预先配置您希望后端服务器在极少数情况下 Play Integrity API 发生大规模服务中断时如何运行。

API 用法概述

图 1. 概要介绍 Play Integrity API 设计的序列图。

当用户在您的应用中执行您要通过完整性检查保护的重要操作时,请完成以下步骤:

  1. 应用的服务器端后端生成一个唯一的值,并将其发送到客户端逻辑。剩余步骤会将该逻辑称为您的“应用”。
  2. 您的应用会基于唯一值以及重要操作的内容创建 Nonce,然后会调用 Play Integrity API,并传入 Nonce。
  3. 您的应用收到来自 Play Integrity API 的已签名且加密的判定。
  4. 应用将已签名且加密的判定结果传递到应用后端。
  5. 应用后端将判定结果发送到 Google Play 服务器。Google Play 服务器解密并验证判定结果,并将结果返回给应用的后端。
  6. 应用后端根据令牌载荷中包含的信号来决定如何继续操作。
  7. 应用后端将决策结果发送到您的应用。

API 使用量水平

对该 API 的请求受每个应用每天的最大请求次数制约,该最大值由为发起调用的应用分配的使用量水平确定。下表显示了不同的使用量水平:

表 1. Play Integrity API 使用层
使用层 每天允许的 API 调用次数 条件要求
标准 最多 10,000 次 适用于采用任何分发渠道的应用
提高后 可超过 10,000 次的上限,需获得批准 必须正确实现 API 逻辑(包括重试)
适用于在使用 Google Play 的同时,还使用其他任何分发渠道的应用

就 API 使用而言,如果在 Google Play 和其他分发渠道上采用相同的软件包名称,则视为单个应用。您可以针对具有不同软件包名称的多个应用使用一个 Google Cloud 项目 ID。如果您这样做,就 API 使用而言,系统会将这些应用视为单个应用。

查看使用层

为了帮助您评估与 Play Integrity API 的互动频率,Play 管理中心会显示应用的使用层。如需查看该使用层,请执行以下操作:

  1. 登录 Play 管理中心。
  2. 选择一个使用 Play Integrity API 的应用。
  3. 在左侧菜单中的“版本”部分中,依次转到“设置”>“应用完整性”。
  4. 在 Integrity API 标签页中的“设置”部分,查找“使用量水平”属性。此属性的值会显示应用的使用量水平。

更改使用量水平

如需请求更改应用的使用量水平,请填写此表单。 如果您的应用需要处理更多的用户,但不需要针对每个用户更频繁地调用 API,您应该请求升至更高的使用量水平。即使升到了更高的使用量水平,您的应用也应继续将 API 调用限于不常执行的重要操作。

设置配额监控和提醒

通常,系统会在几个工作日内处理使用量水平提升请求。为了保持良好的用户体验并避免出现紧急情况,我们建议您使用 Cloud Monitoring 设置应用的 API 配额使用情况监控和提醒机制。