gpt4 book ai didi

android - Firebase:onDisconnect 事件何时触发?

转载 作者:行者123 更新时间:2023-12-01 16:42:50 26 4
gpt4 key购买 nike

我正在为我的 Android 应用程序使用 Firebase 后端。我想为我的聊天构建一个用户存在系统。为此,我从 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 事件何时会被触发?!

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

因此,据我了解,我必须手动处理此类事件:

1)关闭我的应用程序;

2)关闭WiFi;

3)也许是别的东西

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

最佳答案

客户端与服务器断线时可能会出现两种情况:

  1. 客户端显式断开与服务器的连接
  2. 客户就这样消失了

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

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

如果这个间隔对您来说不够精细,您能做的最好的事情就是定期更新数据库中所谓的保持 Activity 值,更短的间隔。这样您就可以看到客户端最近处于 Activity 状态的时间,如果时间太早,则可以采取行动。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com