Si su estructura de firebase no es demasiado compleja, también podría crear una interfaz que defina métodos como
void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);
luego cree 2 clases que implementen esa interfaz, una usando Firebase y la otra usando SQLite.
DatabaseImplementation
FirebaseImplementation
Dentro de su implementación de Firebase, publicaría los datos normalmente y publicaría un nuevo nodo en algo como root/requestUpdate/userId/push/
y push contendría información sobre dónde solicita una actualización y qué deviceId lo publicó.
Luego, tenga un ValueEventListener vinculado a ese nodo mencionado, y si obtiene un nuevo hijo, verifique si el ID del dispositivo es el mismo o no. Si no es así, tenga la Implementación de Firebase obtener datos usando la información que obtuvo, y luego use la Implementación de base de datos , para añadir datos .
Eso aseguraría que cada vez que se realice un cambio, cualquier otro cliente que haya iniciado sesión sabrá actualizar su base de fuego. Si el cliente no está en línea, la próxima vez que esté en línea lo hará cuando se active ValueEventListener cuando se adjunte. Asegúrese de recorrer todas las actualizaciones solicitadas para asegurarse de que todas estén hechas. También almacene las teclas de inserción de cualquier actualización que haya completado en una base de datos local de esa manera no terminará actualizando más de una vez.
Básicamente, la base de fuego siempre estará actualizada y almacenará cualquier cambio que haya realizado un usuario en un nodo separado que escucharán todos los clientes.
Obviamente, esta solución todavía tiene muchos problemas que deberá solucionar, como averiguar cuándo eliminar el nodo requestUpdate. Lógicamente, después de que cada usuario se haya sincronizado, pero ¿cómo se determina esto? ...
En cuanto al primer inicio de sesión, deberá escribir un populateDatabaseFromFirebase() método que hará una gran cantidad de getDatas y addDatas. Cómo lo haría dependerá de cómo se vea su base de datos. Luego almacenaría que el usuario ya ha iniciado sesión con SharedPreferences y el UID de firebase .
Dicho todo esto, esto solo funcionará si su base de fuego es bastante plana. Si tiene una base de datos compleja, entonces todo se vuelve mucho más complicado y enredado y entonces podría valer la pena buscar en una biblioteca externa.