Szukaj…


Wprowadzenie

W tym poście znajdziesz różne sposoby wdrażania funkcji offline podczas korzystania z Firebase , informacje o tym, kiedy i dlaczego warto być dobrym pomysłem, włącz funkcje offline i przykłady tego na platformie Android.

Uwagi

Czego powinienem użyć? Trwałość dysku czy połączenia KeepSynced?


Z mojego doświadczenia mogę powiedzieć, że zawsze zależy to od tego, jak działa Twoja aplikacja oraz od tego, jak zarządzasz transakcjami i bazą danych aplikacji. Jeśli na przykład masz aplikację, w której użytkownik po prostu zapisuje i odczytuje dane, ale nie jest w stanie ich usunąć ani edytować, użycie DiskPersistence byłoby właściwym wyborem.

Ponadto DiskPersistence będzie przechowywać dane w pamięci podręcznej, co oznacza, że aplikacja zajmie więcej miejsca w urządzeniach użytkownika, co może nie być najlepszym pomysłem w twoim przypadku.

Z drugiej strony, jeśli aplikacja zarządza wieloma złożonymi transakcjami, a dane są bardzo często aktualizowane, być może powinieneś unikać DiskPersistence i użyć keepSynced w referencjach, które chcesz zachować na bieżąco.

Dlaczego?


DiskPersistence przechowuje dane pobrane lokalnie, co czasami może powodować dużą desynchronizację, pokazując twoje dane, jeśli nie użyjesz ich razem z ciągłymi ListenerValueEvents . Na przykład:

  1. Użytkownik A zapisuje komunikat „Hello World” w Twojej aplikacji, który otrzymuje użytkownik B.
  2. Użytkownik B pobiera wiadomość od użytkownika A ze swojego telefonu i widzi komunikat „Hello World”
  3. Użytkownik A ma swoją wiadomość do „Firebase is cool”.
  4. Użytkownik B nadal będzie wyświetlał komunikat „Witaj świecie”, nawet jeśli zaktualizuje dane, ponieważ odwołanie do migawki jest takie samo, gdy filtr Firebase dla niego.

Aby tego uniknąć, najlepszym pomysłem jest ciągłe słuchanie referencji, które chcesz śledzić przez cały czas.

Czy mogę używać obu razem?


Oczywiście możesz i w większości aplikacji jest to najlepszy pomysł, aby uniknąć pobierania dużej ilości danych i dać użytkownikowi możliwość pracy z aplikacją, nawet jeśli nie ma połączenia.

Jeśli nie dbają o wykorzystanie przestrzeni w pamięci podręcznej urządzenia użytkownika, polecam włączenie diskPersistence w FirebaseDatabase obiektu, a także dodać keepSync flagi do każdego odwołania, które mogą mieć wiele razy w krótkim czasie, przestrzeni lub chcesz zachowaj świeżość przez cały czas.

Włącz trwałość dysku (tylko Android / iOS)

Aby włączyć trwałość dysku, należy włączyć flagę persistenceEnabled w obiekcie FirebaseDatabaseInstance aplikacji:

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

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

Jeśli chcesz wyłączyć trwałość w pewnym momencie cyklu życia aplikacji, pamiętaj, aby wyłączyć ją w ten sam sposób:

Android

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

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

Utrzymywanie aktualności danych (tylko Android / iOS)

Firebase synchronizuje i przechowuje lokalną kopię danych dla aktywnych słuchaczy, gdy są one używane na urządzeniach mobilnych. Ponadto możesz synchronizować określone lokalizacje.

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)

Klient Firebase automatycznie pobiera dane w tych lokalizacjach i aktualizuje je, nawet jeśli odwołanie nie ma aktywnych detektorów. Wyłącz synchronizację za pomocą następującego wiersza kodu.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow