Firestore + база данных в реальном времени: присутствие отключается через минуту и ​​больше никогда не возвращается в онлайн

Я создаю приложение с 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, успешно завершены и т. д.

Я думаю, это происходит потому, что я на самом деле не выполняю никаких запросов к базе данных реального времени. Я прав?

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

Frank van Puffelen 21.11.2018 15:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
344
1

Ответы 1

Вам следует реализовать логику для базы данных в реальном времени, а затем вам нужно будет использовать CloudFunctions для синхронизации базы данных в реальном времени и Cloud Firestore. Это единственный путь. Вы когда-нибудь использовали облачные функции в прошлом?

Нет, я строю немного другой корпус, и мне не нужна вся сила присутствия. Я хочу указать конечному пользователю, что соединение потеряно (и убрать индикатор при восстановлении соединения).

Artur Eshenbrener 21.11.2018 13:45

но вы имеете в виду подключение к интернету?

Helmer Barcos 21.11.2018 13:47

Не только подключение к Интернету - подключение к серверам firebase. Интернет-соединение Becuase обычно доступно, но серверы firebase могут быть недоступны.

Artur Eshenbrener 22.11.2018 12:44

Другие вопросы по теме