Я создаю приложение с firestore, react-native и react-native-firestore. Сейчас в своем проекте использую только firestore. Я хочу реализовать присутствие для этого приложения и нашел решение: https://firebase.google.com/docs/firestore/solutions/presence?authuser=0
Я начал с написания простого кода:
firebase.database().ref(".info/connected").on("value", snap => {
console.info(".info/connected", snap.val());
});
просто чтобы проверить, как это работает.
Он выводит это
11-21 14:48:03.117 6502 6571 I ReactNativeJS: '.info/connected', false
11-21 14:48:03.710 6502 6571 I ReactNativeJS: '.info/connected', true
11-21 14:49:02.892 6502 6571 I ReactNativeJS: '.info/connected', false
Как видите, сразу после запуска приложения статус подключения становится true в течение секунды. Но через ~ 1 минуту он становится false и никогда не возвращается в true. Между тем приложение полностью работает, запросы, отправленные в firestore, успешно завершены и т. д.
Я думаю, это происходит потому, что я на самом деле не выполняю никаких запросов к базе данных реального времени. Я прав?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам следует реализовать логику для базы данных в реальном времени, а затем вам нужно будет использовать CloudFunctions для синхронизации базы данных в реальном времени и Cloud Firestore. Это единственный путь. Вы когда-нибудь использовали облачные функции в прошлом?
Нет, я строю немного другой корпус, и мне не нужна вся сила присутствия. Я хочу указать конечному пользователю, что соединение потеряно (и убрать индикатор при восстановлении соединения).
но вы имеете в виду подключение к интернету?
Не только подключение к Интернету - подключение к серверам firebase. Интернет-соединение Becuase обычно доступно, но серверы firebase могут быть недоступны.
Вы правы: если вы не слушаете никаких других данных, Firebase SDK автоматически закроет свое соединение с базой данных в реальном времени через минуту. Чтобы предотвратить это, добавьте отдельный слушатель в корень пустой базы данных, например, вызвав
firebase.database().ref().keepSynced(true). Это известная проблема в документации. См. stackoverflow.com/questions/53320480/…