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:
- Proyecto Apache CouchDb
- Couch Db - La guía definitiva - Libro gratis.
- Bolsa Db
- Couchbase
CouchDb Hosters:
DIY
- Cómo instalar CouchDB y Futon en Ubuntu 12.04 - Ocean Digital
- Asegure CouchDB utilizando SSL / HTTPS
Docker + CouchDb:
- Dockerizing un servicio CouchDB
- GitHub: otro sofá dockerizado
- Dockized CouchDB 1.6.0 con terminador SSL
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).
- Guía definitiva de Matt Woodward sobre la autenticación y seguridad de CouchDB
- Descripción general de seguridad de CouchDB
- superlogin es una excelente API de Passport / Authentication de NodeJS que envuelve CouchDb permitiendo que las aplicaciones fuera de línea de PouchDb sean compatibles con los inicios de sesión sociales de OAuth o las cuentas de nombre de usuario / contraseña. Incluye una demo ng-superlogin angular de API de demo y del lado del cliente que funciona completamente.
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