Я хочу иметь возможность удалить значение соединения из базы данных firebase моего приложения в режиме реального времени, когда они неожиданно теряют соединение. Это не представляется возможным из того, что я уже пробовал.
Я пытался использовать функцию "goOffline", чтобы правильно закрыть сокеты, потому что, как я слышал, он не закрывается должным образом, когда вы выключаете Wi-Fi.
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 секунд, но мне нужно, чтобы мое приложение могло обрабатывать любые интернет-прерывания и быстро удалять значение подключения.
Кроме того, если нет доступного способа удалить значение из клиента, когда клиент отключает их Wi-Fi. Есть ли способ обнаружить отключение от сервера на самом сервере? Я попытался сравнить date.getTime () с другой переменной date.getTime (), которая при вызове запроса Connect обновляет переменную. Затем сервер наблюдает, но, похоже, он не работает, потому что по какой-то причине он перестал наблюдать за переменной, как только клиент отключился и не успел ее реализовать. Я предполагаю, что это потому, что сервер основан на облачных функциях и не имеет причин для запуска, когда ни один клиент не вызывает его.