Fonctionnalités hors ligne de Firebase

Dans cet article, vous trouverez les différentes façons d’implémenter des fonctionnalités hors ligne lors de l’utilisation de “Firebase”, des informations sur le moment et la raison pour lesquelles il pourrait être judicieux d’activer les fonctionnalités hors ligne et des exemples avec la plate-forme Android.

Que dois-je utiliser ? Persistance du disque ou appels keepSynced ?


D’après mon expérience, je peux dire que cela dépend toujours de ce que votre application fonctionne et de la façon dont vous gérez les transactions et la base de données de votre application. Si, par exemple, vous avez une application dans laquelle l’utilisateur ne fait qu’écrire et lire des données mais qu’il n’est pas en mesure de les supprimer ou de les modifier, l’utilisation de DiskPersistence serait le bon choix.

De plus, DiskPersistence stockera les données dans le cache, ce qui signifie que votre application utilisera plus d’espace sur les appareils de l’utilisateur, ce qui n’est peut-être pas la meilleure idée dans votre cas.

D’autre part, si votre application gère de nombreuses transactions complexes et que vos données sont mises à jour très souvent, vous devriez peut-être éviter DiskPersistence et utiliser keepSynced dans les références que vous souhaitez conserver à jour.

Pourquoi?


DiskPersistence stocke les données récupérées en local, ce qui peut parfois causer beaucoup de désynchronisation en affichant vos données si vous ne les utilisez pas avec des ListenerValueEvents continus. Par exemple:

  1. L’utilisateur A écrit un message “Hello World” sur votre application, qui est reçu pour l’utilisateur B
  2. L’utilisateur B télécharge le message de l’utilisateur A sur son téléphone et voit le message “Hello World”
  3. L’utilisateur A modifie son message en “Firebase is cool”.
  4. L’utilisateur B regardera toujours le message “Hello World” même s’il met à jour les données car la référence de l’instantané est la même lorsque Firebase le filtre.

Pour éviter cela, la meilleure idée est de garder des auditeurs continus dans les références que vous souhaitez suivre à tout moment.

Puis-je utiliser les deux ensemble ?


Bien sûr, vous pouvez, et dans la plupart des applications, c’est peut-être la meilleure idée pour éviter de télécharger beaucoup de données et donner à l’utilisateur la possibilité de travailler avec votre application même s’il n’a pas de connexion.

Si vous ne vous souciez pas de l’utilisation de l’espace de cache dans la machine utilisateur, je vous recommande d’activer diskPersistence dans votre objet FirebaseDatabase et également d’ajouter un drapeau keepSync à chaque référence qui peut avoir beaucoup de fois dans un court l’espace-temps ou vous voulez rester frais tout le temps.

Activer la persistance du disque (Android/iOS uniquement)

Pour activer la persistance du disque, vous devez activer le drapeau persistenceEnabled dans l’objet FirebaseDatabaseInstance de votre application :

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

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

Si vous souhaitez désactiver la persistance à un moment donné du cycle de vie de votre application, vous devez vous rappeler de la désactiver de la même manière :

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

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

Actualisation des données (Android/iOs uniquement)

Firebase synchronise et stocke une copie locale des données pour les auditeurs actifs lorsqu’ils sont utilisés sur des appareils mobiles. De plus, vous pouvez synchroniser des emplacements spécifiques.

Android :

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

iO :

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

Le client Firebase télécharge automatiquement les données à ces emplacements et les maintient à jour même si la référence n’a pas d’écouteurs actifs. Vous désactivez la synchronisation avec la ligne de code suivante.

Android :

scoresRef.keepSynced(false);

iOS :

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