我在我的 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 - 由于 OTHER 断开连接
当我重新连接时,我得到:
W/PersistentConnection: pc_1 - Firebase 数据库连接被服务器强行终止。不会尝试重新连接。原因:appcheck 令牌无效
我正在我的 MainActivity onCreate() 方法中初始化应用程序检查,如下所示。我已尝试将以下代码移动到网络连接观察器中(如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 的东西对我来说几乎是一个黑匣子。有关如何处理或调试它的任何提示都会有所帮助。