Синхронизация наблюдателей базы данных Firebase в реальном времени и трафик данных Swift - PullRequest
0 голосов
/ 06 декабря 2018

Есть кое-что, что мне не совсем понятно в отношении чтения из базы данных Firebase.Когда я помещаю наблюдателя в детство, он будет просто загружать новые сообщения как добавленные, сохраняя локально сохраненный файл, или каждый раз, когда я запускаю свое приложение, он будет загружать всю ветку?Со страницы руководства Firebase я читаю Every client connected to a Firebase database maintains its own internal version of any active data. When data is written, it's written to this local version first.

Я спрашиваю после прочтения случая запуска, который суммировал счет в 30 тысяч за ночь, и я был бы рад избежать повторения этого сам.Поскольку мое приложение просыпается в запрограммированное время для выполнения проверки, было бы очень дорого, если бы я каждый раз загружал всю базу данных.Я отключил слушателей, когда выходил из приложения, чтобы пропускная способность трубки и батарея были удобными, и я не слушал новые сообщения, когда они не используются.Вот код для задействованных функций.

Рединг:

func displayAlerts() {

        ref = Database.database().reference()

        databaseHandle = ref?.child("Community").child("Alert Notifications").observe(.childAdded, with: { (snapshot) in

            //            defer { self.dummyFunctionToFoolFirebaseObservers() }
            guard let data = snapshot.value as? [String:String] else { return }
            guard let firebaseKey = snapshot.key as? String else { return }
            //                let date = data!["Date"]
            //                let time = data!["Time"]
            let dataLatitude = data["Latitude"]!
            let dataLongitude = data["Longitude"]!

            let type = data["Description"]!
            let id = Int(data["Id"]!)
            let doubledLatitude = Double(dataLatitude)
            let doubledLongitude = Double(dataLongitude)
            let recombinedCoordinate = CLLocationCoordinate2D(latitude: doubledLatitude!, longitude: doubledLongitude!)

            print("Firebase alerts posts retrieved")

            //            print("Longitude Actual DataKey is \(String(describing: firebaseKey))")

            //            print("fir long \((snapshot.value!, snapshot.key))")
            let userAlertAnnotation = UserAlert(type: type, coordinate: recombinedCoordinate, firebaseKey: firebaseKey, title: type,id: id!)

            self.userAlertNotificationArray.append(userAlertAnnotation)  // array of notifications coming from Firebase
            print("userAlertNotificationArray after retrieving from Firebase is : \(self.userAlertNotificationArray)")

            MapArray.alertNotificationCoordinatesArray.append(recombinedCoordinate) // array for checkig alerts on route
            print("alertNotificationCoordinatesArray after retrieving from Firebase is : \(MapArray.alertNotificationCoordinatesArray)")
            self.mapView.addAnnotation(userAlertAnnotation)

        })
    }

и отсоединение:

override func viewDidDisappear(_ animated: Bool) {

    ref!.removeObserver(withHandle:databaseHandle!)
}

я должен использовать removeObserverWithHandle или removeAllObservers?

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