tutorial studio guardar ejemplos datos apps offline offline-caching offlineapps firebase

offline - studio - progressive web apps ejemplos



¿Firebase permite que una aplicación se inicie en modo fuera de línea? (3)

La respuesta corta es: todavía no.

Una vez que una aplicación se haya conectado a Firebase, el cliente almacenará en caché los datos localmente y podrá acceder a los datos en los que haya una devolución de llamada sobresaliente incluso después de que se pierda una conexión de red. Sin embargo, estos datos no se conservan en el disco, el "modo fuera de línea" solo funcionará mientras la aplicación todavía se está ejecutando.

Soporte completo fuera de línea vendrá en el futuro.

edición 2016: ahora es posible la compatibilidad total sin conexión para las aplicaciones nativas de iOS y Android: https://www.firebase.com/blog/2015-05-29-announcing-mobile-offline-support.html

Estoy pensando en usar firebase para escribir una aplicación móvil usando PhoneGap y el caché de aplicaciones HTML5.

Supongamos que cada usuario tiene una lista de elementos TODO. Si la aplicación se inicia cuando el teléfono está desconectado, ¿podrá cargar datos de la sesión anterior y sincronizarse cuando se establezca una conexión? Si es así, me pregunto cómo se implementa esto porque no pude encontrar una referencia a localStorage en firebase.js.


Una alternativa a Firebase que resuelve este problema para las aplicaciones JS es CouchDb (servidor) <=> PouchDb (cliente JS). Si ha implementado una capa de servicio del lado del cliente limpia y agradable, portar a PouchDb debería ser bastante sencillo ya que ambas son bases de datos NoSQL / JSON. CouchDb también es compatible con mapas indexados / reducir las vistas.

PouchDb es una API de Javascript que implementa un cliente CouchDb totalmente fuera de línea. Puede detectar automáticamente y utilizar el almacenamiento local , IndexDb o WebSQL para conservar permanentemente los datos locales mientras está en línea o fuera de línea. La API de PouchDb se puede utilizar para acceder a sus bases de datos locales o remotas (simplemente cambie la URL) y conecte la sincronización completa o la sincronización filtrada entre las dos. Hay muchos plugins de PouchDb útiles, muestras de código y una pequeña biblioteca contenedora para admitir la API Q promesas de AngularJS.

Usando PouchDb, puede iniciar su aplicación de manera segura mientras está fuera de línea y luego, días después, reiniciar su aplicación y sincronizar todos sus cambios de datos de CUD en el servidor. Esto puede ocasionar colisiones de actualización, por lo que CouchDb admite versiones de registro diseñadas para detectar y rastrear esto. En consecuencia, es probable que necesite la lógica del lado del servidor para resolver estas colisiones. Esto es inevitable para sistemas distribuidos con sincronización fuera de línea y una característica clave de CouchDb. No estoy seguro de que Firebase admita esta función de MVCC.

PouchDb es básicamente una reimplementación de Apache CouchDb, incluido su protocolo de sincronización. Tanto CouchDb como PouchDb están bien probados, libres y de código abierto. Ser de código abierto significa que un servidor CouchDb también puede implementarse como un servicio de intranet, opcionalmente sincronizándose con un servicio de nube externo. Hay varios proveedores de hosting CouchDb.

El equipo de alojamiento Cloudant de IBM recientemente agregó sus características de agrupación BigCouch al proyecto Apache CouchDb 2.0 para que ahora pueda escalar desde Micro Db (PouchDb) => Servidor único => Multi-Master (Replicado) => Big Couch Clustered / Geo Clustered. A diferencia de MongoDb, CouchDb admite de manera segura la implementación de servidor único.

NOTA: PouchDb también se puede sincronizar con CouchBase usando el mismo protocolo pero Couchbase! == CouchDb. Es un producto comercial.

Otro truco genial es que PouchDb se puede ejecutar dentro de un servidor NodeJS como reemplazo de CouchDb. Creo que todavía no está listo para su uso en producción, pero es muy útil para pruebas unitarias. Ver express-pouchdb .

Campo de golf:

CouchDb Hosters:

DIY

Docker + CouchDb:

Modelo de seguridad

Un tema que deberá tener en cuenta al migrar a CouchDb es que tiene un modelo de control de acceso más limitado. Esto se debe en parte a su algoritmo de replicación. Esta publicación del blog cubre esto en detalle (mejor que la verdadera guía definitiva).

Adaptadores

En la práctica, es probable que desee utilizar WebSQL para su almacenamiento PouchDB, ya que funciona mucho mejor. - Aquí están los detalles completos sobre los adaptadores de almacenamiento

PouchDb Extras

Hay una asombrosa variedad de nuevas cosas interesantes de "Árbol de Navidad" que siempre abren la puerta de código abierto de la prolífica comunidad PouchDb.

Una de las mejores características de PouchDb son todos los plugins código abierto (37) y los adaptadores de marco de UI (12).


Una pregunta muy antigua, pero el problema aún persiste. He estado utilizando firebase solo durante unos días y no he podido encontrar una solución satisfactoria a este problema, así que pensé en compartir lo que terminé haciendo.

Al inicio de la aplicación, compruebo si estoy en línea navigator.onLine . De lo contrario, leí en el almacenamiento local y restauré la referencia de la base de fuego.

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

Luego proceda como siempre. Cuando la aplicación se conecte, sincronizará su estado local con el servidor como cuando se inicia en línea y pierde la conexión momentáneamente.

Por supuesto, esto implica que localStorage necesita mantenerse sincronizado con su referencia de firebase. Lo hago en cada operación de obtención.

Espero que esto ayude