如果应用程序进入后台模式,则会触发 Ondisconnect

Ondisconnect is fired if app goes to background mode

我有以下代码:

func OnlineStatus(userID: String){
        handle = Auth.auth().addStateDidChangeListener { (auth, user) in
            if let user = user {
                // User is signed in.
                self.UID = user.uid

                self.connectedRef.observe(.value, with: { snapshot in
                    if let connected = snapshot.value as? Bool, connected {
                        // print("############################ Connected")
                        self.ref.child(self.UID!).child("OnlineStatus").setValue("ON")
                    } else {
                        // print("############################ Not connected")
                        self.ref.child(self.UID!).child("OnlineStatus").setValue("OFF")
                    }
                    self.ref.child(self.UID!).child("OnlineStatus").onDisconnectSetValue("OFF")
                })
            }}
            }

该函数将在viewWillAppear 中触发。这个想法是建立一个简单的存在系统。出于某种原因,当我将应用程序发送到后台而不是让我的 iPhone 进入睡眠状态时,onDisconnect 被触发。我实际上希望只有当用户注销或失去互联网连接时,在线状态才会关闭。我的代码或设置有什么问题?

当客户端与 Firebase 数据库服务器断开连接时会触发 onDisconnect 事件,并且当您的应用进入后台时会发生这种情况。从 Firebase 的角度来看,用户乘坐火车驶入隧道与他们 phone 去睡觉之间没有区别。在这两种情况下,客户端和服务器之间的连接都会断开,因此 onDisconnect() 会触发。

您通常最终会使用 .info/connectedonDisconnect() 来设置用户最后一次出现的时间值,同时使用 onAuthStateChanged() 来设置用户的状态标志正在登录。然后通过首先显示已登录的用户来显示用户列表,按照他们最近活跃的顺序。