Firebase: Wenn das Ereignis onDisconnect ausgelöst wird?

8

Ich benutze Firebase-Backend für meine Android-Anwendung. Ich möchte ein Benutzerpräsenzsystem für meinen Chat erstellen. Zu diesem Zweck habe ich das Muster aus Firebase Guide

genommen %Vor%

Das Problem ist, dass ich nicht weiß, wann das Ereignis onDisconnect ausgelöst wird?!

Jedes Mal, wenn ich die App öffne, schreibe ich TRUE in den Knoten " users / joe / connections ", aber wenn ich die App schließe, würde nichts passieren. Wenn ich WIFI ausgeschaltet habe, würde der boolesche Parameter ebenfalls nicht entfernt werden. onDisconnect-Ereignis wird nur ausgelöst, wenn ich meine App gewaltsam gestoppt oder diese App neu installiert habe oder etwas anderes, wenn ich nicht feststellen konnte.

Also, wie ich richtig verstehe, muss ich solche Ereignisse manuell behandeln:

1) schließe meine App;

2) WLAN ausschalten;

3) vielleicht etwas anderes

zum Erstellen der Anwesenheitsfunktion in meiner App? Aber wann muss dann onDisconnect-event ausgelöst werden?

    
Alex Zezekalo 05.06.2015, 13:51
quelle

2 Antworten

13

Es gibt zwei Fälle, die auftreten können, wenn der Client und der Server nicht verbunden sind:

  1. Der Client trennt explizit die Verbindung zum Server
  2. Der Client verschwindet einfach

Wenn Sie die App beenden, lösen Sie eine explizite Trennung aus. In diesem Fall sendet der Client ein Signal an den Server, dass die Verbindung getrennt wird, und der Server führt sofort den onDisconnect -Rückruf aus.

Wenn Sie WLAN ausschalten, erhält Ihre App keine Möglichkeit, dem Server mitzuteilen, dass die Verbindung getrennt wird. In diesem Fall wird der onDisconnect ausgelöst, sobald der Server feststellt, dass der Client verschwunden ist. Dies kann einige Minuten dauern, abhängig davon, wie die Timeouts für Sockets konfiguriert sind. In diesem Fall müssen Sie nur etwas geduldiger sein.

    
Frank van Puffelen 05.06.2015, 16:00
quelle
0

Wenn der Benutzer die App beendet, können Sie admin.database().goOffline() aufrufen, um die Verbindung zum Firebase, der den onDisconnect -Rückruf auslösen soll, explizit zu trennen. Wenn der Benutzer zur App zurückkehrt, rufe einfach admin.database().goOnline() auf, um die Verbindung mit Firebase wiederherzustellen.

    
ElectroBuddha 21.01.2017 23:12
quelle