1

我在我的 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 的东西对我来说几乎是一个黑匣子。有关如何处理或调试它的任何提示都会有所帮助。

4

0 回答 0