0
richtig verwendet

Ich habe eine Android-App geschrieben, die anonyme Firebase-Authentifizierung verwendet und von einem Vordergrunddienst in die Firebase-Datenbank schreibt. Ich verwende onDisconnect().removeValue(), um Daten zu bereinigen, die von meiner App erstellt werden, wenn der Websocket geschlossen wird. Wenn ein Nutzer aktiv mit der App kommuniziert, wird der Anruf onDisconnect() wie erwartet ausgelöst (dh, meine Sicherheitsregeln sind OK). Wenn jedoch der Vordergrunddienst für eine lange Zeitperiode (z. B. über Nacht, Bildschirm wird ausgeschaltet usw.) laufen gelassen wird, wird der Anruf niemals erneut ausgelöst. Die App funktioniert weiterhin nach dem Aufwachen (Kommunikation mit dem Firebase-Server usw.), aber wenn es Zeit ist, die App zu schließen (nach einem Zeitraum von Leerlaufzeit), scheint der onDisconnect() Aufruf irgendwie verloren zu sein.Wie man Firebase von einem Vordergrunddienst in Android

Ich habe gelesen, dass anonyme Authentifizierungssitzungen stündlich vom Firebase SDK aktualisiert werden. Ist es möglich, dass dies in der Aktivität geschieht (und vom Betriebssystem beendet wird, aber der Vordergrund-Dienst am Leben gehalten wird), wodurch der Server den Rückruf an onDisconnect verwirft? Wenn ja, kann diese Funktionalität im Vordergrund-Service erhalten bleiben?

Antwort

0

Firebase hatte in letzter Zeit einen Fehler (nicht sicher, ob es behoben wurde), bei dem es sich bei jeder Stunde reAus Authenticates verliert, da es nicht mehr die Berechtigung zum Ändern dieses Knotens besitzt. Dies verursacht dann das Duplikat.

Einige mögliche Lösungen:

  1. einen Zeitstempel anhängen und prüfen, ob der letzte Zeitstempel über eine Stunde, und wenn es ist, es dann löschen, wenn die neuen hinzufügen.

  2. Entfernen Sie die Authentifizierungsanforderungen für das Schreiben in den Knoten, um die Verbindungen zu verfolgen (dies wäre jedoch nicht sicher, je nach Ihren Anforderungen).

Hier sind einige weitere Alternativen und eine bessere Erklärung des Problems von einem Mitglied der Firebase Team: here.

+0

Danke @Aubtin. Es ist gut zu wissen, dass es kein Problem mit meinem Code ist und dass das Firebase-Team das Problem kennt. –

0

Android-Anwendungsprozesse können unbegrenzt leben. Wenn der Benutzer eine App nicht mehr verwendet, kann Android den Prozess weiterhin aktiv halten, um ihn schneller laden zu können, wenn der Benutzer zurückkehrt. Sie können sich vorstellen, dass dies eine Optimierung ist, und Sie sollten erwarten, dass dies manchmal geschieht. Sie sollten nicht versuchen, dieses Verhalten zu kontrollieren - lassen Sie Android dies für Sie verwalten.

Ihre Verbindung zur Datenbank wird nicht geschlossen, da die App noch aktiv ist und die Verbindung zur Datenbank bestehen bleibt. Ich schlage vor, dass Sie für sich selbst nachverfolgen, wenn der Nutzer die App nicht mehr verwendet, und erzwingen Sie danach eine Bereinigung zu einem geeigneten Zeitpunkt, ohne davon auszugehen, dass Android den Prozess Ihrer App jemals beenden wird.

Verwandte Themen