swift firebase onDisconnectRemoveValue не срабатывает при выключении wifi - PullRequest
0 голосов
/ 19 мая 2019

Я хочу иметь возможность удалить значение соединения из базы данных 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 обновляет переменную. Затем сервер наблюдает, но, похоже, он не работает, потому что по какой-то причине он перестал наблюдать за переменной, как только клиент отключился и не успел ее реализовать. Я предполагаю, что это потому, что сервер основан на облачных функциях и не имеет причин для запуска, когда ни один клиент не вызывает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...