firebase
Firebase Offline-förmågor
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:
- Användare A skriver ett meddelande "Hej världen" i din app, som tas emot för användare B
- Användare B ladda ner meddelande från användare A i sin telefon och se meddelandet "Hello World"
- Användare En redigering är hans meddelande till "Firebase is cool".
- 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