如何使用geofire连续查询附近的用户?

时间:2019-07-15 02:35:45

标签: ios swift location geofire

我正在将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查询,以将所有用户加载到数组中,然后仅在当前用户希望刷新数据时才运行它。从网上侦察看来,我似乎无法真正做到这一点,因此我将需要不断地监听查询事件,但是我不确定如何在代码中做到这一点。

0 个答案:

没有答案