我正在将Firebase后端用于我的android应用程序。我想为我的聊天建立一个用户状态系统。为此,我采用了《 Firebase指南》中的模式

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");
  }
});


问题是我不知道何时会触发onDisconnect事件?

每次我打开应用程序时,我都会将“ TRUE”写入“用户/ Joe /连接”节点,但是当我关闭应用程序时,什么也不会发生。
当我关闭WIFI时,布尔参数也不会被删除。
仅当我强制停止我的应用程序或重新安装此应用程序时或其他无法确定的情况时,才会触发onDisconnect-event。

因此,据我所知,我必须手动处理此类事件:

1)关闭我的应用;

2)关闭WiFi;

3)也许其他

在我的应用程序中创建在线状态功能?但是然后什么时候会触发onDisconnect-event呢?

最佳答案

客户端和服务器断开连接时,可能会发生两种情况:


客户端明确断开与服务器的连接
客户就消失了


当您终止应用程序时,将触发显式断开连接。在这种情况下,客户端将向服务器发送断开连接的信号,并且服务器将立即执行onDisconnect回调。

关闭wifi时,您的应用程序没有机会告诉服务器它正在断开连接。在这种情况下,一旦服务器检测到客户端消失,onDisconnect将触发。这可能需要几分钟,具体取决于套接字超时的配置方式。因此,在这种情况下,您只需要多一点耐心即可。

如果此间隔对您而言不够细密,则您可以做的最好的事情就是以规则的较短间隔更新数据库中的所谓“保持活动”值。这样,您可以看到客户端最近一次处于活动状态的时间,如果时间太久,则可以对其进行操作。

关于android - Firebase:onDisconnect事件何时触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61829488/

10-11 14:57