我正在将GeoFire
用于我的IOS应用程序以查找附近的用户。据我了解,我无法一次检索附近的所有用户,而是必须监听keyEntered
查询事件,并在每个用户进入该区域时将他们添加到数组中(如果我输入错了,请对此进行更正) 。既然是这种情况,我将需要在我的应用程序运行时连续监听keyEntered
事件,以吸引附近的所有用户。
当前,我将放置GeoFire
代码以在iPhone的位置更新时运行,但是如果iPhone停留在同一位置并且不更新其位置,则GeoFire
将不会查询任何附近的用户。
这是GeoFire
当前在代码中更新位置的地方:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locations = locations.last else { return }
guard let userID = Auth.auth().currentUser?.uid else { return }
let geofireRef = Database.database().reference().child("GeoFire")
let geoFire = GeoFire(firebaseRef: geofireRef)
geoFire.setLocation(locations, forKey: userID)
self.currLoc = locations
let center = locations
let circleQuery = geoFire.query(at: center, withRadius: 50)
circleQuery.observe(.keyEntered, with: { (key: String!, location: CLLocation!) in
if (key != userID) {
let user = User(userID: key)
user.userDist = (Int(center.distance(from: location)))
self.users.append(user)
}
})
}
理想情况下,我想在GeoFire
处于活动状态时仅运行一次ViewController
查询,以将所有用户加载到数组中,然后仅在当前用户希望刷新数据时才运行它。从网上侦察看来,我似乎无法真正做到这一点,因此我将需要不断地监听查询事件,但是我不确定如何在代码中做到这一点。