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:

  1. Benutzer A schreibt eine Nachricht "Hello World" in Ihre App, die für Benutzer B empfangen wird
  2. Benutzer B lädt Nachricht von Benutzer A in sein Telefon herunter und zeigt die Nachricht "Hello World" an.
  3. Benutzer A edit ist seine Nachricht an "Firebase is cool".
  4. 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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow