Android中使用密钥实现Play Integrity的测试方法求助
Play Integrity 实现测试指南及代码问题修复
当前代码核心问题
你现在的代码仅完成了请求Play Integrity Token的前端步骤,完全缺失了Token的后端验证环节——这就是使用错误启动密钥仍能正常登录的根本原因。Play Integrity的安全验证必须在后端完成,客户端仅负责获取Token并传递给后端,后端验证通过后才能允许登录。
正确测试步骤
一、客户端侧场景测试
- Google Play服务不可用测试:在模拟器或真机上禁用Google Play服务,验证是否触发
killProcess逻辑。 - Root设备测试:使用已Root的真机或带Root权限的模拟器,检查应用是否被强制终止。
- Token请求分支测试:
- 断网状态下测试:验证是否触发
onFailure回调(当前代码未在回调中处理逻辑,建议补充终止登录的操作)。 - 正常联网状态下测试:确认能成功获取Token,并将Token传递到后端。
- 断网状态下测试:验证是否触发
二、后端验证测试(关键环节)
- 配置Play Integrity环境:在Google Play Console中完成Play Integrity的配置,获取官方提供的验证密钥。
- 实现后端Token解析逻辑:
- 使用Google官方客户端库(如Java的
google-api-services-playintegrity)或直接调用REST API,传入前端获取的Token和验证密钥,解析出IntegrityPayload。
- 使用Google官方客户端库(如Java的
- 验证Payload核心字段:
appIntegrity.appRecognitionVerdict:需确保值为PLAY_RECOGNIZED,验证应用是从官方Play商店安装的正版应用。deviceIntegrity:根据业务需求验证设备安全状态(如是否为未Root设备)。accountDetails.appLicensingVerdict:若需验证应用授权状态,需确认值为LICENSED。
- 错误密钥测试:使用错误的验证密钥解析Token,验证后端是否返回验证失败结果,此时后端应拒绝客户端的登录请求。
代码修复建议
补充onSuccess回调中Token的后端传递逻辑,示例如下:
@Override public void onSuccess(IntegrityTokenResponse integrityTokenResponse) { String integrityToken = integrityTokenResponse.token(); // 将Token发送到后端进行验证 postTokenToBackend(integrityToken); } private void postTokenToBackend(String token) { // 实现网络请求逻辑,将Token传递给后端 // 根据后端返回的验证结果处理登录流程 // 示例:若验证失败,终止应用 // if (!verifySuccess) { // android.os.Process.killProcess(android.os.Process.myPid()); // } }
同时建议在onFailure回调中补充终止登录的逻辑,避免Google Play服务异常时应用仍能继续登录。
额外测试技巧
- 使用Play Console的Play Integrity测试工具:创建测试账号,模拟篡改应用、未授权设备等异常场景,验证后端的验证逻辑是否生效。
- 使用签名后的APK测试:Play Integrity对签名有严格要求,建议使用上传到Play Console的内部测试/封闭测试版本进行测试,避免debug版本的签名问题导致验证异常。
内容的提问来源于stack exchange,提问作者watshallicallme
相关产品推荐
相关产品推荐

