Firebase permet-il à une application de démarrer en mode déconnecté?

je pense utiliser firebase pour écrire une application mobile en utilisant PhoneGap et le Cache D'Application HTML5.

supposons que chaque utilisateur ait une liste d'éléments TODO. Si l'application est démarrée lorsque le téléphone est déconnecté, sera-t-elle capable de charger les données de la session précédente et de synchroniser lorsqu'une connexion est établie? Si c'est le cas, je me demande comment cela est implémenté car je n'ai pas pu trouver de référence à localStorage dans firebase.js.

28
demandé sur eug 2013-02-03 11:32:20

3 réponses

La réponse est: pas encore.

une fois qu'une application est connectée à Firebase, le client cache les données localement et peut accéder aux données lorsqu'il y a un appel "on" en cours, même après la perte d'une connexion réseau. Cependant, ces données ne sont pas persistées sur le disque, le "mode hors ligne" ne fonctionnera que pendant que l'application est encore en cours d'exécution.

un support offline complet sera disponible à l'avenir.

modifier 2016 : le support complet hors ligne est maintenant possible pour les applications iOS et Android: https://www.firebase.com/blog/2015-05-29-announcing-mobile-offline-support.html

21
répondu Andrew Lee 2016-03-29 13:26:49

une alternative à Firebase qui résout ce problème pour les applications JS est CouchDb (server) <=> PouchDb (js client). Si vous avez implémenté une couche de service client propre, le portage vers PouchDb devrait être assez simple puisque les deux sont des bases de données NoSQL/JSON. CouchDb prend également en charge les cartes indexées/les vues réduites.

PouchDb est une API Javascript qui implémente un entièrement en mode hors connexion client CouchDb. Il peut automatiquement détecter et utiliser stockage local, IndexDb ou WebSQL permanence persistent local de données en ligne ou hors ligne. L'API PouchDb peut être utilisée pour accéder à vos bases de données locales ou distantes (il suffit de changer L'URL) et pour transférer la synchronisation complète ou filtrée entre les deux. Il existe de nombreux plugins PouchDb utiles, des exemples de code et une petite bibliothèque de wrappers pour supporter L'API Q promises D'AngularJS.

en utilisant PouchDb, vous pouvez démarrer en toute sécurité votre application hors ligne et puis quelques jours plus tard redémarrer votre application et synchroniser toutes les modifications de vos données CUD sur le serveur. Cela peut entraîner des collisions de mise à jour de sorte que CouchDb supporte le versioning d'enregistrement qui est conçu pour détecter et suivre ceci. Par conséquent, vous aurez probablement besoin de logique côté serveur pour résoudre ces collisions. Cela est inévitable pour les systèmes distribués avec synchronisation hors ligne et une caractéristique clé de CouchDb. Je ne suis pas sûr que Firebase supporte cette fonctionnalité MVCC.

PouchDb est essentiellement une réimplantation D'Apache CouchDb y compris le protocole de synchronisation. CouchDb et PouchDb sont des sources libres et ouvertes. Le fait d'être open source signifie qu'un serveur CouchDb peut également être déployé en tant que service Intranet - éventuellement synchronisé avec un service cloud externe. Il existe plusieurs hébergeurs CouchDb.

L'équipe D'hébergement Cloudant D'IBM a récemment ajouté ses fonctionnalités de clustering BigCouch au projet Apache CouchDb 2.0 pour que maintenant vous puissiez passer de Micro Db (PouchDb) => serveur unique => Multi-Master (Répliqué) = > Grand Canapé Groupé / Géo Groupé. Contrairement à MongoDb, CouchDb supporte en toute sécurité le déploiement d'un seul serveur.

NOTE: PouchDb peut aussi se synchroniser avec CouchBase en utilisant le même protocole mais Couchbase != = CouchDb. C'est un produit commercial.

un autre truc cool est que PouchDb peut être lancé à l'intérieur d'un serveur NodeJS en remplacement de CouchDb. Je pense qu'il n'est pas (encore) prêt à être utilisé en production, mais très pratique pour les essais à l'unité. Voir express-pouchdb.

Liens:

CouchDb Hébergeurs:

DIY

Menu Fixe + CouchDb:

Modèle De Sécurité

un problème que vous devrez prendre en compte lors de la migration vers CouchDb est qu'il a un modèle de contrôle d'accès plus limité. Ceci est dû en partie à son algorithme de réplication. Ce blog couvre en détail (mieux que le réel définitive guide.)

Adaptateurs

en pratique, vous voudrez probablement utiliser WebSQL pour le stockage de votre Pochdb car il fonctionne beaucoup mieux. - Voici le plus de détails sur les adaptateurs de stockage

PouchDb Extras

il y a un tableau renversant de nouvelles bonnes choses "D'Arbre de Noël" toujours surgissant de la porte de source ouverte de la communauté prolifique de PouchDb.

l'Un des meilleurs caractéristiques de PouchDb est tout le open source plugins (37) et les adaptateurs de cadre D'UI (12).

9
répondu Tony O'Hagan 2016-05-18 08:58:30

question très ancienne, mais le problème persiste. J'utilise firebase seulement depuis quelques jours et je n'ai pas pu trouver de solution satisfaisante à ce problème moi-même, donc j'ai pensé que je partagerais ce que j'ai fini par faire.

Sur app start-je vérifier si je suis en ligne navigator.onLine. Si non, je lis de stockage local et de restaurer la base de feu ref de celui-ci.

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)
  })
}

puis procéder comme d'habitude. Lorsque l'application est en ligne, il synchronisera son état local avec le serveur comme quand il commence en ligne et perd la connexion momentanément.

bien sûr cela implique que localStorage doit être en phase avec votre firebase réf. Je le fais à chaque opération d'acquisition.

J'espère que cela aidera

0
répondu undefinederror 2017-12-12 07:55:05