firebase
Firebase-Offline-Funktionen
Suche…
Einführung
In diesem Beitrag werden die verschiedenen Möglichkeiten zur Implementierung von Offline-Funktionen bei der Verwendung von Firebase
. Informationen dazu, wann und warum eine gute Idee hilfreich sein könnte, ermöglichen Offline-Funktionen und Beispiele für Android-Plattformen.
Bemerkungen
Was soll ich verwenden? Datenträgerpersistenz oder KeepSynced-Anrufe?
Aus meiner Erfahrung kann ich sagen, dass es immer darauf ankommt, was Ihre App funktioniert und wie Sie die Transaktionen und die Datenbank Ihrer Anwendung verwalten. Wenn Sie beispielsweise über eine Anwendung verfügen, in der der Benutzer nur Daten schreibt und liest, diese jedoch nicht gelöscht oder bearbeitet werden kann, ist DiskPersistence
die richtige Wahl.
Außerdem speichert DiskPersistence
Daten im Cache. DiskPersistence
bedeutet, dass Ihre App mehr Speicherplatz auf den Geräten des Benutzers belegt, was in Ihrem Fall möglicherweise nicht die beste Idee ist.
Wenn Ihre Anwendung andererseits viele komplexe Transaktionen verwaltet und Ihre Daten wirklich häufig aktualisiert werden, sollten Sie möglicherweise DiskPersistence
vermeiden und keepSynced
in den Referenzen verwenden, die Sie keepSynced
halten möchten.
Warum?
DiskPersistence
speichert die abgerufenen Daten in local, was manchmal zu einer Desynchronisierung der Daten führen kann, wenn Sie sie nicht zusammen mit ListenerValueEvents
. Zum Beispiel:
- Benutzer A schreibt eine Nachricht "Hello World" in Ihre App, die für Benutzer B empfangen wird
- Benutzer B lädt Nachricht von Benutzer A in sein Telefon herunter und zeigt die Nachricht "Hello World" an.
- Benutzer A edit ist seine Nachricht an "Firebase is cool".
- Benutzer B wird die Nachricht "Hello World" weiterhin anzeigen, auch wenn er die Daten aktualisiert, da der Snapshot-Ref beim Firebase-Filter derselbe ist.
Um dies zu vermeiden, sollten Sie die Zuhörer ständig in den Referenzen halten, die Sie ständig verfolgen möchten.
Kann ich beides zusammen verwenden?
Natürlich ist dies möglich, und in den meisten Apps ist es möglicherweise die beste Idee, das Herunterladen vieler Daten zu vermeiden und dem Benutzer die Möglichkeit zu geben, mit Ihrer App zu arbeiten, auch wenn er keine Verbindung hat.
Wenn Sie sich nicht für die Verwendung von Cache-Speicherplatz auf dem Benutzergerät diskPersistence
, empfehle ich Ihnen, diskPersistence
in Ihrem FirebaseDatabase
Objekt zu aktivieren und jeder Referenz ein keepSync
hinzuzufügen, das in kurzer Zeit viel Zeit benötigt oder Sie möchten Bleib immer frisch.
Festplattenpersistenz aktivieren (nur Android / iOS)
Um die Festplattenpersistenz zu aktivieren, sollten Sie das Flag persistenceEnabled
im FirebaseDatabaseInstance
Objekt Ihrer Anwendung aktivieren:
Android
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
iOS
Database.database().isPersistenceEnabled = true //Swift
[FIRDatabase database].persistenceEnabled = YES; //Objetive-C
Wenn Sie die Persistenz in einem bestimmten Moment Ihres App-Lebenszyklus deaktivieren möchten, sollten Sie daran denken, sie auf dieselbe Weise zu deaktivieren:
Android
FirebaseDatabase.getInstance().setPersistenceEnabled(false);
iOS
Database.database().isPersistenceEnabled = false //Swift
[FIRDatabase database].persistenceEnabled = NO; //Objetive-C
Daten frisch halten (nur Android / iOs)
Firebase synchronisiert und speichert eine lokale Kopie der Daten für aktive Listener, wenn sie auf mobilen Geräten verwendet werden. Darüber hinaus können Sie bestimmte Standorte synchron halten.
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)
Der Firebase-Client lädt die Daten automatisch an diesen Speicherorten herunter und aktualisiert sie auch dann, wenn die Referenz keine aktiven Listener hat. Sie deaktivieren die Synchronisierung mit der folgenden Codezeile.
Android :
scoresRef.keepSynced(false);
iOS:
[scoresRef keepSynced:NO]; //Objetive-C
scoresRef.keepSynced(false) //Swift