Pokud vaše struktura Firebase není příliš složitá, můžete také vytvořit rozhraní, které definuje metody jako
void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);
poté vytvořte 2 třídy implementující toto rozhraní, jednu pomocí Firebase a druhou pomocí SQLite.
DatabaseImplementation
FirebaseImplementation
Uvnitř implementace Firebase byste publikovali data jako obvykle a publikovali jeden nový uzel do něčeho jako root/requestUpdate/userId/push/
a push by obsahovalo informace o tom, kde požadujete aktualizaci a jaké deviceId zveřejnil.
Pak nechejte ValueEventListener přivázat ke zmíněnému uzlu, a pokud získá nového potomka, ať se podívá, zda je deviceId stejné nebo ne. Pokud tomu tak není, použijte FirebaseImplementation getData pomocí informací, které jste získali, a poté použijte Implementaci databáze , a přidat data .
To by zajistilo, že kdykoli dojde ke změně, každý jiný přihlášený klient bude vědět, že má aktualizovat svou firebase. Pokud klient není online, až bude příště online, udělá to tak, jak se spustí ValueEventListener, když je připojen. Ujistěte se, že procházíte všechny požadované aktualizace, abyste se ujistili, že jsou všechny provedeny. Také ukládejte tlačítka všech aktualizací, které jste provedli, do místní databáze, abyste nemuseli skončit aktualizaci více než jednou.
Firebase bude v zásadě vždy aktuální a bude ukládat jakékoli změny, které uživatel provedl na samostatném uzlu, kterému naslouchají všichni klienti.
Je zřejmé, že toto řešení má stále mnoho problémů, které byste museli opravit, například zjistit, kdy odstranit uzel requestUpdate. Logicky po synchronizaci každého uživatele, ale jak to zjistíte? ...
Pokud jde o první přihlášení, budete muset napsat populateDatabaseFromFirebase() metoda, která udělá spoustu getDatas a addDatas. Jak byste to udělali, bude záviset na tom, jak vypadá vaše DB. Potom byste uložili, že se uživatel již přihlásil pomocí SharedPreferences a firebase UID .
Jak již bylo řečeno, bude to fungovat pouze tehdy, pokud je vaše firebase pěkně plochá. Pokud máte složitou databázi, pak se vše stává mnohem komplikovanějším a zamotanějším a pak by možná stálo za to poohlédnout se po externí knihovně.