Firebase App Check(基于Play Integrity API)在已认证非Root的Pixel及部分小米设备上出现403(应用证明失败)问题求助
各位大佬好,想请教一个关于Firebase App Check的棘手问题:
我们团队在Android端集成了基于Play Integrity API的Firebase App Check。一开始因为部分用户(尤其是GrapheneOS用户)被无端拦截,我们暂时关闭了这个功能;后来为了兼容GrapheneOS,我们改用硬件认证方案,重新启用App Check后,大部分场景下都运行得很正常。
但最近我们遇到了头疼的情况:完全合规的合法用户也被拦截了,报错信息如下:
Caused by com.google.firebase.FirebaseException: Error returned from API. code: 403 body: App attestation failed.
at com.google.firebase.appcheck.internal.NetworkClient.makeNetworkRequest(NetworkClient.java:190)
at com.google.firebase.appcheck.internal.NetworkClient.exchangeAttestationForAppCheckToken(NetworkClient.java:122)
at com.google.firebase.appcheck.playintegrity.internal.PlayIntegrityAppCheckProvider.lambda$getToken$0(PlayIntegrityAppCheckProvider.java:87)
at com.google.android.gms.tasks.zzz.run(zzz.java:1)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0(CustomThreadFactory.java:47)
at java.lang.Thread.run(Thread.java:1012)
我们了解到,这个403错误是因为Play Integrity认证失败,通常是返回的deviceRecognitionVerdict数组为空,或者不包含以下任意一个校验值:
MEETS_STRONG_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITY
正常通过校验的返回示例应该是这样的:
deviceIntegrity: { deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"] }
另外,我们已经在Google Play控制台更新了App Integrity API的设置,允许只要满足上述三个条件中的任意一个即可通过校验。
本来像非官方系统、Root/修改过的设备,甚至有人把APP装在树莓派上这种情况被拦截,我们都是可以接受的,但现在出现了完全合规的用户被拦的情况,比如:
- 一台Pixel 4a设备:
- 已经通过Google Play认证
- Play Protect状态正常
- 是原生未Root的ROM,并且安装了最新的安全补丁
- 用App Integrity Checker工具检测,所有级别的设备完整性校验都不通过
类似的情况还发生在多款小米设备上,比如Redmi Note 13 Pro 5G、Xiaomi 14T Pro、Xiaomi 13T Pro等。
更麻烦的是,我们的APP是纯移动端应用,用户没有其他登录渠道,这个问题直接导致这些用户无法使用服务。想请教各位:
- 有没有办法可以解除这些合法用户的拦截?
- 让用户恢复出厂设置会不会有可能解决这个问题?
- 还有其他什么思路或者临时方案可以解决这种异常情况吗?
万分感谢各位的帮助!
内容来源于stack exchange




