Sto usando Firebase-backend per la mia applicazione Android. Mi piacerebbe creare un sistema di presenza degli utenti per la mia chat. A tal fine ho preso il modello da Firebase GuidaFirebase: quando l'evento onDisconnect si attiva?
final Firebase myConnectionsRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/connections");
// stores the timestamp of my last disconnect (the last time I was seen online)
final Firebase lastOnlineRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/users/joe/lastOnline");
final Firebase connectedRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
// add this device to my connections list
// this value could contain info about the device or a timestamp too
Firebase con = myConnectionsRef.push();
con.setValue(Boolean.TRUE);
// when this device disconnects, remove it
con.onDisconnect().removeValue();
// when I disconnect, update the last time I was seen online
lastOnlineRef.onDisconnect().setValue(ServerValue.TIMESTAMP);
}
}
@Override
public void onCancelled(FirebaseError error) {
System.err.println("Listener was cancelled at .info/connected");
}
});
il problema è che non so quando OnDisconnect evento sarebbe stato licenziato ?!
Ogni volta che apro l'app scrivo TRUE al nodo "users/joe/connections" ma quando ho chiuso l'app non sarebbe successo niente. Quando ho spento il WIFI, il parametro booleano non verrebbe rimosso. L'evento onDisconnect è stato attivato solo quando ho fermato forzatamente la mia app o reinstallato questa app o altrove quando non ero in grado di determinare.
Quindi, come ho capito bene che devo gestire tali manualmente gli eventi:
1) chiudere il mio app;
2) spegnere WiFi;
3) forse qualcos'altro
per la creazione di funzionalità di Presenza nella mia app? Ma poi quando è stato licenziato l'evento onDisconnect?
Non capisco. Quando un utente preme il pulsante INDIETRO e chiude tutte le attività, onDisconnect() non attiva. Ma in questa situazione, l'utente dovrebbe considerare offline, giusto? – iForests
@iForests Penso che per 'Quando un utente preme il pulsante INDIETRO e chiude tutte le attività' deve essere gestito in _ActivityLifecycleCallbacks_ – rookieDeveloper
@Frank_van_Puffelen quanto tempo ci vuole al suo massimo affinché il server rilevi che il client è sparito? e questo non è pratico perché il server impieghi alcuni minuti perché andare offline dovrebbe immediatamente attivare le relative funzioni nel server Firebase in modo che gli utenti ne comprendano lo stato. –