Ricerca…


introduzione

In questo post troverai i diversi modi per implementare le funzionalità offline quando utilizzi Firebase , le informazioni su quando e perché potrebbe essere una buona idea abilitare funzionalità offline ed esempi di esso con la piattaforma Android.

Osservazioni

Cosa dovrei usare? Persistenza del disco o chiamate KeepSynced?


Dalla mia esperienza posso dire che dipende sempre da cosa sta funzionando la tua app e da come gestisci le transazioni e il database della tua applicazione. Se ad esempio si dispone di un'applicazione in cui l'utente sta solo scrivendo e leggendo i dati ma non è in grado di eliminarli o modificarli, utilizzare DiskPersistence sarebbe la scelta giusta.

Inoltre, DiskPersistence memorizzerà i dati nella cache, il che significa che la tua app utilizzerà più spazio nei dispositivi dell'utente, il che forse non è l'idea migliore nel tuo caso.

D'altra parte, se la tua applicazione gestisce molte transazioni complesse e i tuoi dati vengono aggiornati molto spesso, probabilmente dovresti evitare DiskPersistence e usare keepSynced nei riferimenti che vuoi mantenere aggiornato.

Perché?


DiskPersistence memorizza i dati recuperati in locale, che a volte possono causare molta desincronizzazione mostrando i tuoi dati se non li usi insieme al continuo ListenerValueEvents . Per esempio:

  1. L'utente A scrive un messaggio "Hello World" sulla tua app, che viene ricevuto per l'utente B
  2. Utente B scarica il messaggio dell'Utente A nel suo telefono e visualizza il messaggio "Hello World"
  3. L'utente A edit ha il suo messaggio su "Firebase is cool".
  4. L'utente B continuerà a visualizzare il messaggio "Hello World" anche se aggiorna i dati perché il ref istantanea è lo stesso quando il filtro Firebase ne fa uso.

Per evitare ciò, l'idea migliore è di mantenere gli ascoltatori in continuo nei riferimenti che si desidera tracciare sempre.

Posso usare entrambi insieme?


Certo che puoi, e nella maggior parte delle app è probabilmente l'idea migliore per evitare di scaricare molti dati e dare all'utente la possibilità di lavorare con la tua app anche se non ha alcuna connessione.

Se non ti interessa utilizzare lo spazio della cache nel dispositivo utente, ti consiglio di abilitare diskPersistence nell'oggetto FirebaseDatabase e di aggiungere anche un flag keepSync a ogni riferimento che può avere un sacco di volte in un breve spazio o che vuoi mantieni fresco tutto il tempo.

Abilita la persistenza del disco (solo per Android / iOS)

Per abilitare la persistenza del disco, devi abilitare il flag persistenceEnabled nell'oggetto FirebaseDatabaseInstance della tua applicazione:

androide

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

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

Se vuoi disabilitare la persistenza in qualche momento del ciclo di vita della tua app dovresti ricordarti di disabilitarla allo stesso modo:

androide

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

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

Mantenere i dati freschi (solo Android / iO)

Firebase sincronizza e archivia una copia locale dei dati per i listener attivi quando viene utilizzata su dispositivi mobili. Inoltre, puoi mantenere sincronizzati luoghi specifici.

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)

Il client Firebase scarica automaticamente i dati in queste posizioni e li mantiene aggiornati anche se il riferimento non ha ascoltatori attivi. Si disabilita la sincronizzazione con la seguente riga di codice.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow