当他们的应用程序意外失去连接时,我希望能够从我的应用程序的实时Firebase数据库中删除连接值。根据我已经尝试过的方法,这似乎是不可能的。
我尝试使用“ goOffline”功能正确关闭套接字,因为据我所知,当您关闭wifi时,它无法正确关闭。
func connect() {
let connectionsRef = self.rootRef.child("connections")
AF.request("https://projectname.cloudfunctions.net/Connect").response { response in
if response.data != nil {
if self.visiblename != nil {
connectionsRef.observeSingleEvent(of: .value, with: { snapshot in
for value in JSON(snapshot.value!).arrayValue {
if value["Address"].string! == self.visiblename {
let connectionRef = connectionsRef.child(String(value["Index"].int!))
connectionRef.keepSynced(true)
connectionRef.onDisconnectRemoveValue()
}
}
})
}
}
}
}
self.reachability.whenUnreachable = { _ in
Database.database().goOffline()
}
self.reachability.whenReachable = { _ in
Database.database().goOnline()
}
do {
try self.reachability.startNotifier()
} catch {}
它会在大约60秒后自动删除该值,但我需要我的应用程序能够处理任何互联网中断并迅速删除连接值。
此外,如果没有可用的方法在客户端关闭其wifi时从客户端删除该值。有没有办法在服务器本身上检测与服务器的断开连接?我尝试将date.getTime()与另一个date.getTime()变量进行比较,当您调用Connect请求时,它将更新该变量。然后服务器进行监视,但是它似乎没有工作,因为由于某种原因,它在客户端断开连接后就立即停止监视该变量,并且没有时间实现它。我认为这是因为服务器基于云功能,并且在没有客户端调用该服务器时没有理由运行它。