4

I Firebase Realtime-Datenbank in meiner app verwenden. Es funktioniert wirklich gut und ich bin sehr zufrieden damit. Aber kürzlich stieß ich auf einen Edge Case, bei dem einige meiner Benutzer ihre Daten verlieren.Firebase Realtime-Datenbank inkonsistentes Verhalten im Offline-Modus

SZENARIO # 1

Der Benutzer meldet sich die App (Firebase-Authentifizierung) mit Internetverbindung auf, und fügt einige Daten in die Datenbank.

Der Benutzer meldet sich mit Internetverbindung unter ab und meldet sich erneut an, und die zuvor gespeicherten Daten sind wie erwartet vorhanden. Die Internetverbindung war verfügbar und die Daten wurden mit dem Server synchronisiert.

SZENARIO # 2

Jetzt schaltet der Benutzer seine/ihre Internetverbindung ab. Fügen Sie weitere Daten zur Datenbank hinzu und melden Sie sich aus der App ab, wenn die Internetverbindung deaktiviert ist.

Jetzt schaltet der Benutzer seine/ihre Internetverbindung wieder auf und Zeichen in die App in der exakt gleichen Art und Weise wie oben.

Jetzt der Benutzer sehen keine Daten, während die App im Offline-Modus wurde hinzugefügt. Ich habe setPersistenceEnabled(true) und es funktioniert perfekt in normalen Situationen.

Das Problem

Das Problem ist, dass Beharrlichkeit schlägt fehl, wenn der Benutzer im Offline-Modus ist, fügt einige Daten in die Datenbank (die nicht auf den Server nicht synchronisiert werden, da es kein Internet) und abmeldet in Offline-Modus selbst und meldet sich später wieder an.

Dies ist ein Grenzfall, aber einige meiner Benutzer diese haben konfrontiert und haben ihre wertvollen Daten wegen dieser Fehler verloren. Wie behebe ich das? Ist es das Standardverhalten der Firebase-Datenbank? Wenn ja, gibt es eine Umgehung dafür?

+0

Wer irgendwelche Ideen auf, die wie diese zu lösen? –

Antwort

1

Durch meine App funktioniert es genau so.

Von Firebase docs https://firebase.google.com/docs/database/android/offline-capabilities

... Wenn unsere App Firebase-Authentifizierung verwendet, wird der Client die Authentifizierungs-Token über den Neustart des Benutzers bestehen bleiben. Wenn das Authentifizierungs-Token abläuft, während unsere App offline ist, pausiert der Client unsere Schreiboperationen, bis wir uns erneut authentifizieren, andernfalls können unsere Schreibvorgänge aufgrund von Sicherheitsregeln fehlschlagen. ..

Dies bedeutet, dass die Anwendung keine Einträge synchronisiert, die Sie vor dem Abmelden authentifiziert haben, wenn Sie beim Online-Abmelden von der Anwendung abgemeldet werden.

Nur Option ist durch offline nicht abzumelden.

+0

Ja, das ist eine Lösung. Aber es ist immer noch nicht perfekt, da der Benutzer offline war und während dieser Zeit viele Daten gespeichert hat. Jetzt schaltet er schnell das Internet ein und meldet sich ab. Er macht es schnell genug für Firebase, um ein neues Authentifizierungs-Token zu erhalten und die Daten mit dem Server zu synchronisieren.Das Problem passiert immer noch. Gibt es eine Möglichkeit, die Synchronisierung aller Daten vor dem Abmelden zu erzwingen? –

+0

Ich denke nein. Wenn das Internet offline ist, können Sie weder synchronisieren noch authentifizieren. Ich habe das gleiche Problem. Möglicherweise ist die nächste Version von Firebase zu lösen. Antwort lesen unter http://stackoverflow.com/questions/38281761/clear-firefase-persistence-after-logout – eurosecom

+0

Ich weiß, es gibt keine Möglichkeit, offline zu synchronisieren. Gibt es eine Möglichkeit, die Synchronisierung aller Daten zu erzwingen, wenn das Internet verfügbar ist, so dass ich vor dem Abmelden die Synchronisierung aller Daten erzwingen kann und sicherstellen kann, dass auch Internet verfügbar ist. –

Verwandte Themen