Sök…


Introduktion

I det här inlägget hittar du olika sätt att implementera offlinefunktioner när du använder Firebase , information om när och varför kan vara en bra idé möjliggöra offlinefunktioner och exempel på det med Android-plattformen.

Anmärkningar

Vad ska jag använda? Disk persistens eller keepSynced samtal?


Av min erfarenhet kan jag säga att det alltid beror på vad din app fungerar och hur du hanterar transaktionerna och databasen för din applikation. Om du till exempel har ett program där användaren bara skriver och läser data men han inte kan ta bort eller redigera den, skulle DiskPersistence vara rätt val.

DiskPersistence lagrar också data i cache, vilket innebär att din app kommer att använda mer utrymme i användarens enheter, vilket kanske inte är den bästa idén i ditt fall.

Å andra sidan, om din applikation hanterar en hel del komplexa transaktioner och dina data uppdateras verkligen ofta, kanske du bör undvika DiskPersistence och använda keepSynced i referenser som du vill hålla färskt.

Varför?


DiskPersistence lagrar data som hämtas lokalt, vilket ibland kan orsaka mycket desynkronisering som visar dina data om du inte använder dem tillsammans med kontinuerlig ListenerValueEvents . Till exempel:

  1. Användare A skriver ett meddelande "Hej världen" i din app, som tas emot för användare B
  2. Användare B ladda ner meddelande från användare A i sin telefon och se meddelandet "Hello World"
  3. Användare En redigering är hans meddelande till "Firebase is cool".
  4. Användare B tittar fortfarande på "Hello World" -meddelandet även om han uppdaterar uppgifterna för att snapshot-ref är densamma när Firebase-filter för det.

För att undvika detta är den bästa idén att hålla kontinuerliga lyssnare i referenser som du vill spåra hela tiden.

Kan jag använda båda tillsammans?


Naturligtvis kan du, och i de flesta appar är det kanske den bästa idén att undvika att ladda ner mycket data och ge användaren möjlighet att arbeta med din app även om han inte har någon anslutning.

Om du inte bryr dig om att använda cache-utrymme i användarenheten rekommenderar jag att du aktiverar diskPersistence i ditt FirebaseDatabase objekt och lägger till en keepSync flaggor till varje referens som kan ha många gånger på kort tid eller om du vill håll fräsch hela tiden.

Aktivera hårddisken (endast Android / iOS)

För att aktivera skivpersistens bör du aktivera flaggan persistenceEnabled i FirebaseDatabaseInstance objektet i din applikation:

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

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

Om du vill inaktivera uthålligheten i ett ögonblick av din applivscykel ska du komma ihåg att inaktivera den på samma sätt:

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

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

Att hålla data färska (endast Android / iOs)

Firebase synkroniserar och lagrar en lokal kopia av data för aktiva lyssnare när de används på mobila enheter. Dessutom kan du hålla specifika platser synkroniserade.

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)

Firebase-klienten laddar ner data automatiskt på dessa platser och håller dem uppdaterade även om referensen inte har några aktiva lyssnare. Du inaktiverar synkronisering med följande kodrad.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow