我在我的 Android 应用程序中使用 Firebase appcheck。它工作得很好,只是如果我在飞行模式下启动应用程序然后禁用飞行模式(即模拟在没有网络连接的情况下打开应用程序,然后获得网络连接),它总是会失败。
当我没有连接时,我会反复收到:
D/PersistentConnection:pc_0 - 尝试获取身份验证令牌
D/PersistentConnection:pc_0 - 尝试获取应用程序检查令牌
D/PersistentConnection: pc_0 - 成功获取令牌,打开连接
D/Connection: conn_2 - 打开连接
D/WebSocket:ws_2 - WebSocket 错误。
D/PersistentConnection:pc_0 - 由于其他原因断开连接
当我重新获得连接时,我得到:
W/PersistentConnection:pc_1 - Firebase 数据库连接被服务器强制终止。不会尝试重新连接。原因:appcheck 令牌无效
我正在 MainActivity onCreate() 方法中初始化应用程序检查,如下所示。我尝试将以下代码移至网络连接观察器中(如中所述https://firebase.google.com/docs/database/android/offline-capability#section-connection-state https://firebase.google.com/docs/database/android/offline-capabilities#section-connection-state),但没有成功。
FirebaseApp.initializeApp(/*context=*/this)
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
SafetyNetAppCheckProviderFactory.getInstance()
)
firebaseAppCheck.setTokenAutoRefreshEnabled(true)
我访问实时数据库的代码如下:
private val postListener : ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
Timber.d("MetaData", "loadPost:onDataChange")
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Timber.d("MetaData", "loadPost:onCancelled", databaseError.toException())
}
}
...
database.reference.child("databasename").addValueEventListener(postListener)
更广泛地说,是否有更好的方法来设置 appcheck 令牌,以便应用程序可以从错误令牌中恢复?
不幸的是,这个 appcheck 的东西对我来说几乎是一个黑匣子。任何有关如何解决此问题或调试它的提示都会有所帮助。