tiempo studio simultaneas recuperar real limitations evitar duplicados datos conexiones android firebase firebase-database firebase-authentication

android - studio - firebase list



Comportamiento incoherente de la base de datos en tiempo real de Firebase en modo fuera de lĂ­nea (1)

Estoy usando Firebase Realtime Database en mi aplicación. Funciona muy bien y estoy bastante satisfecho con eso. Pero recientemente me encontré con un caso marginal por el cual algunos de mis usuarios están perdiendo sus datos.

ESCENARIO 1

El usuario inicia sesión en la aplicación (Firebase Authentication) con la conexión a Internet activada y agrega algunos datos a la base de datos.

El usuario cierra la sesión con la conexión a Internet y vuelve a iniciar sesión, y los datos almacenados anteriormente están allí como se esperaba. La conexión a Internet estaba disponible y los datos se sincronizaron con el servidor.

ESCENARIO # 2

Ahora el usuario apaga su conexión a internet. Agregue más datos a la base de datos y cierre la sesión de la aplicación cuando la conexión a Internet esté desactivada .

Ahora el usuario vuelve a activar su conexión a Internet y se registra en la aplicación de la misma manera que en el ejemplo anterior.

Ahora el usuario no ve ningún dato que se agregó mientras la aplicación estaba en modo fuera de línea . He setPersistenceEnabled(true) y funciona perfectamente en situaciones normales.

El problema

El problema es que la persistencia falla cuando el usuario está en modo fuera de línea, agrega algunos datos a la base de datos (que no se sincroniza con el servidor ya que no hay internet) y se desconecta en modo desconectado y luego inicia sesión nuevamente más tarde.

Este es un caso límite, pero algunos de mis usuarios se han enfrentado a esto y han perdido sus valiosos datos debido a este error. ¿Cómo arreglar esto? ¿Es el comportamiento predeterminado de Firebase Database? Si es así, ¿hay alguna solución para esto?


Por mi aplicación, funciona exactamente así.

De los documentos de Firebase https://firebase.google.com/docs/database/android/offline-capabilities

... Si nuestra aplicación utiliza Firebase Authentication, el cliente conservará el token de autenticación del usuario durante los reinicios. Si el token de autenticación caduca mientras nuestra aplicación está fuera de línea, el cliente pausará nuestras operaciones de escritura hasta que nos autentiquemos de nuevo, de lo contrario nuestras escrituras podrían fallar debido a las reglas de seguridad. ..

Esto significa que si se cierra la sesión de la aplicación mientras está en línea, la aplicación no sincroniza las entradas que autentica antes de cerrar la sesión.

La única opción es no cerrar sesión sin conexión.