Я использую Firestore с Android SDK (11.6.2), и у меня возникает исключение, когда мое устройство было отключено и повторно подключается к Интернету.
При запросе документа firestore завершается ошибкой со следующим исключением задачи:
com.google.firebase.firestore.FirebaseFirestoreException: не удалось получить документ, поскольку клиент отключен.
Однако устройство подключено, я могу делать сетевые запросы помимо использования Firestore, и они преуспевают. Эта ошибка непоследовательна, иногда запрос выполняется сразу после повторного подключения к Интернету. Иногда запрос снова и снова терпит неудачу, затем выполняется успешно, иногда более чем через минуту после повторного подключения устройства к Интернету.
Вот пример запроса, который вызывает исключение:
val docRef = firestore.collection("foo").document("bar")
docRef.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d("FirestoreSourceSet", "Get document success")
} else {
Log.e("FirestoreSourceSet", "Get document error", task.exception)
}
}
Я не использую автономные возможности Firestore, поэтому экземпляр FirebaseFirestore инициализируется в первый раз с флагом setPersistenceEnabled(false)
:
val firestoreSettings = FirebaseFirestoreSettings.Builder()
.setPersistenceEnabled(false)
.build()
val firestore = FirebaseFirestore.getInstance().apply {
this.firestoreSettings = firestoreSettings
}
Почему Firestore возвращает эту ошибку, даже если устройство подключено к сети? Мне что-то не хватает в конфигурации Firestore, чтобы избежать этой ошибки?
Я попытался обновить Firebase до версии 11.8.0, но столкнулся с тем же поведением.
Журналы
Это журналы при попытке получить синхронизацию некоторых данных с Firestore (которая начинается с получения документа) после выхода из режима полета: https://pastebin.com/xDMG2Pzj
Сеть уже доступна до первого вызова Firestore, так как я ждал, пока Wi-Fi установится, и проверил его с помощью ConnectivityManager Android, прежде чем продолжить работу с Firestore.
Множественные вызовы вызваны тем, что я вручную повторяю попытку с помощью кнопки каждый раз, когда получаю сообщение об ошибке, до тех пор, пока документ не будет успешно получен.
Первая строка журнала - это когда я включаю авиарежим, который закрывает поток Firestore.
Изменить: проблема
Firebase не имеет общедоступного трекера, но я сообщил о проблеме с помощью их инструмента отчетов, и создал репо, в котором воспроизводится проблема.
Они признали проблему, но не смогли предоставить расчетное время прибытия, поэтому нам нужно подождать:
Если мы выпустим исправление, мы объявим об этом на нашей странице примечаний к выпуску.
Это все еще проблема с firestore-core 17.0.4.
get()
и выводом сообщения об ошибке? По моему опыту, Firestore пытается подключиться примерно в течение 30 секунд, поэтому знание задержки помогает определить, на какой фазе он находится. Я также рекомендовал бы включение ведения журнала отладки, чтобы увидеть, дает ли трафик в сети подсказку о том, почему клиент может ' т подключиться. - person Frank van Puffelen   schedule 10.01.2018