Jeśli struktura bazy Firebase nie jest zbyt złożona, możesz również stworzyć interfejs, który definiuje metody takie jak
void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);
następnie utwórz 2 klasy implementujące ten interfejs, jedną używając Firebase, drugą używając SQLite.
DatabaseImplementation
FirebaseImplementation
Wewnątrz swojej implementacji Firebase możesz opublikować dane jak zwykle i opublikować jeden nowy węzeł do czegoś takiego jak root/requestUpdate/userId/push/
a push zawierałoby informacje o gdzie prosisz o aktualizację i jaki identyfikator urządzenia opublikowałem go.
Następnie powiąż ValueEventListener z tym wspomnianym węzłem, a jeśli otrzyma nowe dziecko, sprawdź, czy identyfikator urządzenia jest taki sam, czy nie. Jeśli tak nie jest, skorzystaj z FirebaseImplementation pobierz dane korzystając z otrzymanych informacji, a następnie użyj DatabaseImplementation , aby dodać dane .
To zapewniłoby, że za każdym razem, gdy dokonana zostanie zmiana, każdy inny zalogowany klient będzie wiedział, że musi zaktualizować swoją bazę Firebase. Jeśli klient nie jest online, następnym razem, gdy będzie online, zrobi to jako wyzwalacz ValueEventListener po podłączeniu. Pamiętaj, aby przejść przez wszystkie wymagane aktualizacje, aby upewnić się, że wszystkie zostały wykonane. Przechowuj również klawisze push wszystkich wykonanych aktualizacji w lokalnej bazie danych, dzięki czemu nie zaktualizujesz więcej niż raz.
Zasadniczo baza Firebase będzie zawsze aktualna i będzie przechowywać wszelkie zmiany wprowadzone przez użytkownika w osobnym węźle, którego nasłuchują wszyscy klienci.
Oczywiście to rozwiązanie nadal ma wiele problemów, które trzeba naprawić, na przykład ustalenie, kiedy usunąć węzeł requestUpdate. Logicznie po zsynchronizowaniu każdego użytkownika, ale jak to ustalić? ...
Jeśli chodzi o pierwsze logowanie, musisz napisać populateDatabaseFromFirebase() metoda, która wykona całą masę getDatas i addDatas. Jak byś to zrobił, będzie zależeć od tego, jak wygląda twoja baza danych. Następnie możesz zapisać, że użytkownik zalogował się już za pomocą SharedPreferences i UID bazy Firebase .
Biorąc to wszystko pod uwagę, to zadziała tylko wtedy, gdy twoja baza ogniowa jest dość płaska. Jeśli masz złożoną bazę danych, wszystko staje się znacznie bardziej skomplikowane i zagmatwane, a wtedy warto zajrzeć do zewnętrznej biblioteki.