Я столько недель пытался заставить его работать. Я прочитал документацию много раз, и, кажется, нет примеров этого в Интернете.
Цель:
Все, что я хочу, - это выводить на консоль все сообщения, которые находятся в радиусе 10 км от местоположения текущего пользователя.
Проблемы: Я не совсем понимаю, какие параметры нужно поместить в geoFire.setLocation
местоположение пользователя или местоположение поста. Документация показывает только введенные вручную координаты. Я хочу вытащить мой из базы Firebase и запросить его, когда пользователь проходит в 10 км, они выводятся на консоль. В настоящее время с кодом у меня ничего не печатается вообще.
fileprivate func setupGeoFireLocation() {
let ref = Database.database().reference(withPath: "posts")
ref.observe(.childAdded, with: { (snapshot) in
guard let dictionary = snapshot.value as? [String: Any] else { return }
guard let latitude = dictionary["latitude"] as? String else { return }
guard let longitude = dictionary["longitude"] as? String else { return }
let postLat = (latitude as! NSString).doubleValue
let postLon = (longitude as! NSString).doubleValue
self.geoFire.setLocation(CLLocation(latitude: postLat, longitude: postLat), forKey: "posts")
//Not quite sure what's meant to be the "forKey:" parameter.
})
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation: CLLocation = locations[0] as CLLocation
ref = Database.database().reference()
geoFire = GeoFire(firebaseRef: ref)
let center = CLLocation(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
let circleQuery = geoFire.query(at: center, withRadius: 10.0)
_ = circleQuery.observe(.keyEntered, with: { (key, location) in
print(key)
})
circleQuery.observeReady{
print("All initial data has been loaded and events have been fired for circle query!")
}
}