Recherche…


Introduction

Dans cet article, vous trouverez les différentes manières d'implémenter des fonctionnalités hors ligne lors de l'utilisation de Firebase , des informations sur quand et pourquoi pourraient être une bonne idée pour activer des fonctionnalités hors ligne et des exemples avec la plate-forme Android.

Remarques

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


D'après mon expérience, je peux dire que cela dépend toujours du fonctionnement de votre application et de la manière dont vous gérez les transactions et la base de données de votre application. Si, par exemple, vous avez une application où l'utilisateur écrit et lit simplement des données mais ne peut pas les supprimer ou les éditer, utilisez 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 dans les périphériques 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 beaucoup de 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.

Pourquoi?


DiskPersistence stocke les données extraites en local, ce qui peut parfois entraîner une désynchronisation importante en affichant vos données si vous ne les utilisez pas avec Continents ListenerValueEvents . 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. Le message de l'utilisateur A edit est "Firebase is cool".
  4. L'utilisateur B surveillera 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 les auditeurs continus dans les références que vous souhaitez suivre à tout moment.

Puis-je utiliser les deux ensemble?


Bien sûr, vous pouvez le faire, et dans la plupart des applications, la meilleure idée est d'éviter de télécharger beaucoup de données et de 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 diskPersistence utilisateur, je vous recommande d'activer diskPersistence dans votre objet FirebaseDatabase et d'ajouter également des indicateurs keepSync à chaque référence qui peut avoir beaucoup de temps dans un espace réduit. garder au frais tout le temps.

Activer la persistance du disque (Android / iOS uniquement)

Pour activer la persistance du disque, vous devez activer l'indicateur 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 à certains moments du cycle de vie de votre application, n'oubliez pas 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

Garder les données à jour (Android / iO uniquement)

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

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)

Le client Firebase télécharge automatiquement les données à ces emplacements et les met à jour même si la référence ne contient aucun écouteur actif. 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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow