首页 > 解决方案 > iOS 从用户文档 Firebase Firestore 存储/更新和检索位置数据

问题描述

我们最近开始使用 Firebase Firestore 为 iOS 开发一个类似 uber 的应用程序,我们需要存储并不断更新用户在 firebase 上的位置,并使其其他客户端也可以检索它。

我们正在尝试将用户位置存储在 Firestore 数据库上的用户自己的文档中,例如:

集合 > 用户 > "AutoGeneratedDocument" > UserLocation 具有两个键值纬度和经度。

我们在代码上取得了一些进展,当我们明确输入它的文档路径时,它会写入位置数据,但我们仍然不知道如何运行查询并找到用户自己的文档。

为了将位置数据保存到用户自己的文档中,我们需要能够为当前登录的用户获取自动生成的用户文档路径。

到目前为止,我们已经提出了这个:

func updateUserLocation() {
    let db = Firestore.firestore()
    let locman = CLLocationManager()
    locman.requestWhenInUseAuthorization()
    var loc:CLLocation!
    if CLLocationManager.authorizationStatus() == .authorizedWhenInUse || CLLocationManager.authorizationStatus() == .authorizedAlways{
        loc = locman.location
    }
    let lat:Double = loc.coordinate.latitude
    let long:Double = loc.coordinate.longitude
    let geo = GeoPoint.init(latitude: lat, longitude: long)

    let currentUID = currentUserUID
    let val = db.collection("users").whereField("uid", isEqualTo: currentUserUID)

    db.collection("users").document(val).updateData(["currentUserLocation" : geo])

}

我们希望获取包含已登录用户 UID 的文档的路径,然后将用户位置键值存储在该特定文档中。但是对于我们的代码,在最后一行中,document(val) 部分需要一个字符串,但我们使用“whereField”方法的输出显然是一个查询。

标签: iosswiftfirebasegoogle-cloud-platformgoogle-cloud-firestore

解决方案


你经历了users两次:

db.collection("users").whereField("uid", isEqualTo: currentUserUID).updateData(["currentUserLocation" : geo])

您可以在官方网站上找到许多有用的提示、教程。 在 Cloud Firestore 中执行简单和复合查询


推荐阅读