Как получить действительный токен проверки приложений Firebase после повторного подключения к сети?

# #android #firebase #firebase-app-check

Вопрос:

Я использую проверку приложений Firebase в своем приложении для Android. Это отлично работает, за исключением того, что он постоянно терпит неудачу, если я запускаю приложение в режиме полета, а затем отключаю режим полета (т. Е. Имитирую открытие приложения без подключения к сети, а затем получаю сетевое подключение).

Когда у меня нет подключения, я неоднократно получаю:

D/Постоянное подключение: pc_0 — Попытка получить токен аутентификации

D/Постоянное подключение: pc_0 — Попытка получить маркер проверки приложения

D/PersistentConnection: pc_0 — Успешно извлеченный токен, открытие соединения

D/Соединение: conn_2 — Открытие соединения

D/WebSocket: ws_2 — ошибка WebSocket.

D/Постоянное подключение: pc_0 — Отключено из-за ДРУГИХ

Когда я восстанавливаю связь, я получаю:

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 таким образом, чтобы приложение могло восстановиться после неправильного токена?

Unfortunately, this appcheck stuff is pretty much a black box to me. Any hints on how to approach this or debug it would be helpful.