You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase App Check(基于Play Integrity API)在已认证非Root的Pixel及部分小米设备上出现403(应用证明失败)问题求助

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_INTEGRITY
  • MEETS_DEVICE_INTEGRITY
  • MEETS_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

火山引擎 最新活动