【问题标题】:How can i get user nearby my location in geofire,Firebase如何让用户在我在 geofire、Firebase 的位置附近
【发布时间】:2019-01-05 16:21:27
【问题描述】:

使用这段代码,我只能从 Geolocs 获得一个值,只是键和位置,而不是附近的位置。它有什么问题

var geoFireRef: DatabaseReference?
    var geoFire: GeoFire?
    var myQuery: GFQuery?


func Geofire() {

        geoFireRef = Database.database().reference().child("Geolocs")
    geoFire = GeoFire(firebaseRef: geoFireRef!)
        self.geoFire?.setLocation(currentLocation!, forKey:Auth.auth().currentUser!.uid)

    myQuery = geoFire?.query(at: currentLocation!, withRadius: 100)

    myQuery?.observe(.keyEntered, with: { (key, location) in


        if key != Auth.auth().currentUser?.uid
        {
            let ref = Database.database().reference().child("Users").child(key)

            ref.observeSingleEvent(of: .value, with: { (snapshot) in
                let id = snapshot.key
            })

        }

    })

}

【问题讨论】:

  • 这个问题有点不清楚,没有足够的数据来真正理解这个问题;始终如一地引用您的类变量(self.geoFire 和 geoFire),我不确定它们不只是 let geoFireRef = ... 中的 let 语句的原因,currentLocation 没有定义所以我们没有不知道那是什么,不要在用户节点中存储坐标,因为这就是 geolocs 节点的用途。另外,请查看this question 的两个答案
  • 哦,根据您的屏幕截图,您只有一个用户位置,那就是这个(管理员)用户。如果有更多数据,您可能应该将其包含为文本,请不要截图。请不要在您的问题中包含图片。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil
  • 您的第一条评论链接对我了解我面临的实际问题有很大帮助,谢谢

标签: swift firebase location geofire


【解决方案1】:

使用密钥将您的 GeoFire 位置与所有内容分开,以引用其他附加数据,例如用户信息或发布信息。因为混合静态和动态数据并不是存储数据的最有效方式。

在这里查看我的数据结构和查询:

Retrieving Keys From GeoFire within Radius in Swift

【讨论】:

  • 我没明白你的意思。你的意思是我有一个单独的位置,并在其他函数/类中进行查询???
  • 是的。使用您正在执行的 .uid 键添加您的位置。但将有关用户的所有其他信息分开。那么当您运行查询时,您将得到的只是一堆键,然后您可以全部引用它们并获取附加信息。
  • 我做了,但我没有得到,我只得到一个密钥,即我当前的用户 ID,我在 Geolocs 中设置了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多