Firestore — проверка статуса подключения модуля к серверу

Я заметил, что после отключения подключения к Интернету, а затем его повторного включения (пока мой Android app все еще работает, в фоновом режиме или нет), модулю Firestore требуется довольно много времени, чтобы восстановить соединение с сервером (около минуты), и я не могу выполнить никаких Firestore операций, пока соединение не будет восстановлено.

Это нормальное поведение? Если да, то можно ли как-то проверить текущий статус подключения модуля Firestore? (чтобы ограничить действия моего пользователя, если есть необходимость).


person Tal Barda    schedule 20.11.2017    source источник


Ответы (2)


Насколько я знаю, в Cloud Firestore нет эквивалента базы данных Firebase Realtime Database .info/connected, которая позволяет проверить статус подключения. Я прочитал в официальном блоге Firebase сообщение о различиях между Firebase и Firestore, и я увидел, что эта проблема на самом деле является одним из вариантов использования.

База данных реального времени имеет встроенную поддержку присутствия, то есть возможность определить, когда пользователь подключился к сети или вышел из нее. Хотя у нас есть решение для Cloud Firestore, оно не такое элегантное.

Если вы прочитаете официальную документацию Firestore, вы увидите, что существует возможная реализация система присутствия, объединяющая базу данных реального времени и Firestore.

person Alex Mamo    schedule 20.11.2017
comment
Однако «присутствие» — это другой вариант использования. Это означает, что другой пользователь вышел из сети, а .info/connection имеет значение только для текущего устройства. - person DarkNeuron; 18.01.2018

В настоящее время я тестирую исправление для этого, которое, кажется, работает.

Шаг 1. Убедитесь, что на устройстве установлено подключение для передачи данных, используя рекомендуемый подход Android

public static boolean isConnectedToInternet(@NonNull Context _context) {
    ConnectivityManager cm = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null)
        return false;
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}

Шаг 2. Принудительное подключение Firestore (идея состоит в том, чтобы переопределить экспоненциальную отсрочку повторных попыток внутреннего подключения Firestore)

FirebaseFirestore.getInstance().enableNetwork()

Шаг 3 (необязательно): Если вы делаете это, когда ваше приложение находится в фоновом режиме, вы также можете использовать Android Task API для синхронного ожидания завершения задачи enableNetwork(). В противном случае ОС может решить, что ваша фоновая работа завершена, и отключить доступ вашего приложения к системным ресурсам (сети, ЦП и т. д.).

try { Tasks.await(FirebaseFirestore.getInstance().enableNetwork()); }
catch (Exception e) {
    Log.e(TAG, "error in Firestore enableNetwork(): ", e);
    return;
}
person wildcat12    schedule 16.05.2019