# #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.