Buscar..


Introducción

En esta publicación encontrará las diferentes formas de implementar capacidades fuera de línea al usar Firebase , información sobre cuándo y por qué podría ser una buena idea habilitar capacidades fuera de línea y ejemplos de ello con la plataforma Android.

Observaciones

¿Qué debo usar? ¿La persistencia del disco o mantener llamadas sincronizadas?


Desde mi experiencia, puedo decir que siempre depende de lo que funcione su aplicación y de cómo administre las transacciones y la base de datos de su aplicación. Si, por ejemplo, tiene una aplicación en la que el usuario solo escribe y lee datos pero no puede eliminarlos o editarlos, usar DiskPersistence sería la opción correcta.

Además, DiskPersistence almacenará los datos en caché, lo que significa que su aplicación utilizará más espacio en los dispositivos del usuario, lo que tal vez no sea la mejor idea en su caso.

Por otra parte, si su aplicación gestiona muchas transacciones complejas y sus datos se actualizan muy a menudo, posiblemente deba evitar DiskPersistence y utilizar keepSynced en las referencias que desee mantener actualizadas.

¿Por qué?


DiskPersistence almacena los datos recuperados en local, lo que a veces puede causar gran cantidad de desincronización que muestra sus datos si no los usa junto con ListenerValueEvents continuo. Por ejemplo:

  1. El usuario A escribe un mensaje "Hello World" en su aplicación, que se recibe para el usuario B
  2. El usuario B descarga el mensaje del usuario A en su teléfono y ve el mensaje "Hola mundo"
  3. El usuario A edita su mensaje a "Firebase is cool".
  4. El usuario B seguirá viendo el mensaje "Hola mundo" incluso si actualiza los datos porque la referencia de la instantánea es la misma cuando Firebase lo filtra.

Para evitar esto, la mejor idea es mantener a los oyentes en las referencias que desea rastrear todo el tiempo.

¿Puedo usar los dos juntos?


Por supuesto que puede, y en la mayoría de las aplicaciones es posiblemente la mejor idea para evitar descargar muchos datos y ofrecer al usuario la posibilidad de trabajar con su aplicación, incluso si no tiene conexión.

Si no le importa usar el espacio de caché en el dispositivo del usuario, le recomiendo habilitar diskPersistence en su objeto FirebaseDatabase y también agregar un indicador keepSync a cada referencia que pueda tener muchas veces en un espacio de tiempo corto o que desee mantenerse fresco todo el tiempo.

Habilitar la persistencia del disco (solo Android / iOS)

Para habilitar la persistencia del disco, debe habilitar el indicador persistenceEnabled en el objeto FirebaseDatabaseInstance de su aplicación:

Androide

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

Database.database().isPersistenceEnabled = true //Swift
[FIRDatabase database].persistenceEnabled = YES; //Objetive-C

Si desea deshabilitar la persistencia en algún momento del ciclo de vida de su aplicación, recuerde deshabilitarla de la misma manera:

Androide

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

Database.database().isPersistenceEnabled = false //Swift
[FIRDatabase database].persistenceEnabled = NO; //Objetive-C

Mantener los datos actualizados (solo Android / iOs)

Firebase sincroniza y almacena una copia local de los datos para los oyentes activos cuando se utiliza en dispositivos móviles. Además, puede mantener ubicaciones específicas sincronizadas.

Android:

DatabaseReference workoutsRef = FirebaseDatabase.getInstance().getReference("workouts");
scoresRef.keepSynced(true);

iOs:

//Objetive-c
FIRDatabaseReference *scoresRef = [[FIRDatabase database] referenceWithPath:@"scores"];
[scoresRef keepSynced:YES];
//Swift
let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.keepSynced(true)

El cliente Firebase descarga automáticamente los datos en estas ubicaciones y los mantiene actualizados, incluso si la referencia no tiene escuchas activas. Desactivas la sincronización con la siguiente línea de código.

Android:

scoresRef.keepSynced(false);

iOS:

[scoresRef keepSynced:NO]; //Objetive-C
scoresRef.keepSynced(false) //Swift


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow