Позволяет ли Firebase запускать приложение в автономном режиме?

Я думаю использовать firebase для написания мобильного приложения с помощью PhoneGap и кэша приложений HTML5.

предположим, что у каждого пользователя есть список элементов TODO. Если приложение запускается в автономном режиме, сможет ли оно загружать данные из предыдущего сеанса и синхронизировать их при установлении соединения? Если это так, мне интересно, как это реализовано, потому что я не смог найти ссылку на localStorage в firebase.js.

3 ответов


короткий ответ: пока нет.

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

полная автономная поддержка будет приходить в будущем.

редактировать 2016 : полная автономная поддержка теперь возможно для родных приложений iOS и Android:https://www.firebase.com/blog/2015-05-29-announcing-mobile-offline-support.html


альтернативой Firebase, которая решает эту проблему для приложений JS, является CouchDb (server) PouchDb (JS client). Если вы реализовали хороший чистый уровень обслуживания на стороне клиента, то перенос на PouchDb должен быть довольно прямым, так как оба являются базами данных NoSQL/JSON. CouchDb также поддерживает индексированные карты / уменьшить представления.

PouchDb-это API Javascript, который реализует полностью в автономном режиме клиент CouchDb. Он может автоматически обнаруживать и использовать либо локальное хранилище, IndexDb или технологию WebSQL для постоянного сохранения локальных данных в режиме онлайн или офлайн. API PouchDb можно использовать для доступа к локальным или удаленным базам данных (просто измените URL) и подключить полную синхронизацию или отфильтрованную синхронизацию между ними. Есть много полезных плагинов PouchDb, примеры кода и небольшая библиотека обертки для поддержки AngularJS Q promises API.

используя PouchDb, вы можете безопасно запустить приложение в автономном режиме, а затем через несколько дней перезапустить ваше приложение и синхронизировать все изменения данных CUD на сервере. Это может привести к коллизиям обновлений, поэтому CouchDb поддерживает управление версиями записей, предназначенное для обнаружения и отслеживания этого. Следовательно, вам, вероятно, понадобится логика на стороне сервера для разрешения этих конфликтов. Это неизбежно для распределенных систем с автономной синхронизацией и ключевой особенностью CouchDb. Я не уверен, что Firebase поддерживает эту функцию MVCC.

PouchDb-это в основном реимплементация Apache CouchDb включая протокол синхронизации. И CouchDb и PouchDb хорошо протестированы, свободны и с открытым исходным кодом. Быть открытым исходным кодом означает, что сервер CouchDb также может быть развернут как Служба интрасети-при необходимости синхронизация с внешней облачной службой. Существует ряд хостинг-провайдеров CouchDb.

команда хостинга IBM Cloudant недавно добавила свои функции кластеризации BigCouch в проект Apache CouchDb 2.0, поэтому теперь вы можете масштабироваться с Micro Db (PouchDb) => Single Server => Multi-Master (Replicated) => Большой Диван Кластеризованный / Geo Кластеризованный. В отличие от MongoDb, CouchDb безопасно поддерживает развертывание на одном сервере.

Примечание: PouchDb также может синхронизироваться с CouchBase, используя тот же протокол, но Couchbase !== В CouchDB. Это коммерческий продукт.

еще один классный трюк заключается в том, что PouchDb можно запустить внутри сервера NodeJS в качестве замены CouchDb. Я думаю, что он (еще) не готов к использованию в производстве, но очень удобен для модульного тестирования. Видеть экспресс-pouchdb.

ссылки:

в CouchDB Хостеры:

DIY

Docker + CouchDb:

Модель Безопасности

одна проблема, которую вам нужно будет учитывать при миграции в CouchDb, заключается в том, что она имеет более ограниченную модель управления доступом. Отчасти это связано с алгоритмом репликации. Это сообщение в блоге охватывает это подробно (лучше, чем реальные окончательный руководство.)

переходник

на практике вы, вероятно, захотите использовать WebSQL для хранения PouchDB, поскольку он работает намного лучше. - Вот это полная информация об адаптерах хранения

PouchDb Дополнительно

есть ошеломляющий массив новых прохладных" Рождественская елка " лакомства всегда выскакивают из двери с открытым исходным кодом от плодовитого сообщества PouchDb.

один из лучших особенности PouchDb это все с открытым исходным кодом Плагины (37) и адаптеры UI framework (12).


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

при запуске приложения я проверяю, нахожусь ли я в сети navigator.onLine. Если нет, я читаю из локального хранилища и восстанавливаю ссылку firebase из него.

export const firebaseFromLocalStorage = (local, storeRef) => {
  // assuming data is array
  const localData = JSON.parse(localStorage.getItem(local)) || []
  localData.map(obj => {
    const key = obj['.key']
    delete obj['.key']
    storeRef
      .child(key)
      .set(obj)
  })
}

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

Off конечно, это означает, что localStorage должен быть синхронизирован с вашей Firebase ref. Я делаю это на каждой операции.

надеюсь, что это помогает