Как синхронизировать автономную базу данных с Firebase, когда устройство подключено к сети?

В настоящее время я использую angularJS и phonegap для создания тестового приложения для Android / iOS.

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

В автономном режиме используется API хранилища phonegap / cordova. Могу я просто проверить устройство?s онлайн состояние и резервное копирование онлайн базы данных периодически?

Любые подсказки о том, как я могу этого достичь? В прошлый раз был задан похожий вопрос, ответ был "еще нет"...(Вот)... потому что он сфокусирован на гипотетической особенности Firebase.

Ответы на вопрос(2)

Решение Вопроса

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

Для истинного использования в автономном режиме вы, вероятно, захотите контролировать устройствоS State, а также посмотреть.info/connected знать, когда подключается Firebase.

new Firebase('URL/.info/connected').on('value', function(ss) {
   if( ss.val() === null ) /* firebase disconnected */
   else /* firebase reconnected */
});

Способ достижения этого с помощью текущего набора инструментов Firebase, пока он не поддерживает истинное автономное хранилище, будет

сохранить локальные данные простыми и маленькимикогда устройство подключается к сети, преобразуйте локально сохраненные данные в формат JSON.использованиеset() сохранить данные в Firebase по соответствующему пути

Кроме того, если приложение загружается, когда устройство находится в автономном режиме, по какой-то причине вы можетепремьер» Firebase, вызывая set () для "инициализировать» данные. Затем вы можете использовать Firebase как обычно (как если бы он был в сети) до тех пор, пока он не появится в сети в какой-то момент в будущем (вы также захотите сохранить свою локальную копию, чтобы справиться со случаем, когда этого никогда не происходит).

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

 david10 апр. 2014 г., 23:07
Привет я нене понимаю, что ты имеешь в виду с ... вы можете "премьер» Firebase от ... Thx
 MrYellow11 дек. 2014 г., 23:27
Какие-нибудь решения для работы с аутентификацией Firebase? Кэшировать токены локально и разрешить вход без зависания приложения?
 Kato15 дек. 2014 г., 18:24
Последняя версия Firebase обеспечивает улучшенную поддержку аутентификации в автономном режиме. Читайте об этом в документации. Тем не менее, полная поддержка в автономном режиме выигралЭто возможно до тех пор, пока не будет доступно сохранение в автономном режиме.
 Dennis Smolek12 мая 2015 г., 06:35
@ Като, у тебя есть ссылка на список рассылки? Я'Мне трудно найти что-то большее, чем устаревшее OfflineFirebase для рабочих примеров. Наше решение использует правила безопасности в том смысле, что наше приложение имеет сгенерированного пользователя только для чтения, когда система повторно подключает всеобновления» отклонены, но это кажется хакерским. Я хотел бы, чтобы мы могли передать флаг, чтобы не отправлять на сервер или установить метку времени для вызова обновления
 Kato06 апр. 2015 г., 02:49
Да, этоправильно. Там'Разница между push () или update () / set () и этимЭто совершенно другой вопрос. Это'Это было рассмотрено ранее здесь или в списке рассылки, и решение состоит в том, чтобы использовать правила безопасности.
 Julien Tanay30 мая 2013 г., 11:39
Спасибо за советы, яЯ постараюсь быстро реализовать это. Следующее, что нужно сделать, - это начать работать в автономном режиме ...
 Dennis Smolek06 апр. 2015 г., 01:24
Что происходит, когда данные не по времени? Если я установлю () или update () и он переподключится, не сочтут ли эти данные более новыми и перезаписывают сервер?

Через некоторое время я хотел бы добавить .02 к @Kato 'ответ:

Выбрать позвонитьsnapshot.exists() вместо звонкаsnapshot.val() === null, Какдокументация указывает, существует () немного более эффективно, чем сравнение snapshot.val () с нулем.

И если вы хотите обновить данные, предпочитаете использоватьupdate() метод, а затемset(), так как последний перезапишет ваши данные Firebase. Вы можете прочитать большеВот.

Ваш ответ на вопрос