我最近收到一些用户的通知,表明我的应用程序无法运行。此问题已导致多次卸载。分析问题后发现是Appcheck阻止了用户访问数据库。
我附上了一张屏幕截图,显示了未经验证和无效的请求,我不确定为什么会随机发生这种情况。我已经升级了SDK,但问题仍然存在。
implementation platform('com.google.firebase:firebase-bom:32.7.3')
implementation 'com.google.firebase:firebase-appcheck-playintegrity'
implementation 'com.google.firebase:firebase-appcheck-debug'
我正在按照文档所述方式在
FirebaseAppCheck
类中初始化我的 Application
:
FirebaseApp.initializeApp(getApplicationContext());
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance());
我已经广泛研究了这个问题,但不幸的是,我无法找到明确的解决方案。这尤其令人痛苦,因为它影响了我的用户群,每周失去 200 多名用户。我仍在积极寻求解决方案,任何帮助将不胜感激
编辑:
我可以在我的设备上重现该问题,这是日志消息:
Firebase Database connection was forcefully killed by the server. Will not attempt reconnect. Reason: Invalid appcheck token
问题出在从Play商店安装的版本上,我也在另一台设备上尝试过,它有效!真是让人心疼啊
联系 Firebase 支持团队后,我终于解决了该问题。我们意识到这是一个设备完整性问题。我收到此消息的设备:
Reason: Invalid appcheck token
仅具有 MEETS_BASIC_INTEGRITY 完整性判决,而我的 Play Integrity API 只接受 MEETS_DEVICE_INTEGRITY。这解释了为什么我的应用程序可以在第二台设备上运行。这里有两个捕获来说明差异。
捕获 1:设备拒绝连接
截图2:设备连接成功
为了解决这个问题,我将 MEETS_BASIC_INTEGRITY 添加到 Play Integrity API verdict
Play 控制台 -> 应用程序 -> 应用程序完整性 -> Play 完整性 Api 设置
然后检查MEETS_BASIC_INTEGRITY并保存。
我还检查了MEETS_STRONG_INTEGRITY,设置结果将是这样的:
既然问题已经解决,您仍然需要注意,根据 Firebase 的说法,选择这种较低级别的标签确实会带来安全性降低的成本,应谨慎启用。
我邀请您阅读更多有关诚信判决
的内容