ios - 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”方法的输出显然是一个查询。
解决方案
你经历了users
两次:
db.collection("users").whereField("uid", isEqualTo: currentUserUID).updateData(["currentUserLocation" : geo])
您可以在官方网站上找到许多有用的提示、教程。 在 Cloud Firestore 中执行简单和复合查询
推荐阅读
- ios - iOS cocoapods 在多模块项目的 podspec 中包含 xcassets
- commercetools - ProductProjectionByKeyGet 不按键检索通道引用
- php - 为什么脚本在网站上运行时会删除一个php TXT文件编号内容?
- c++ - 将一个无符号字符分成两半作为一个字符
- python - 如何在 Anaconda 中更新 VSCode - 并获得全新的配置
- python - 如何更改 Keras 模型中的激活函数参数
- c++ - 使用地图打印出生日期,它们最终成为八进制
- webpack - 打包的应用程序无法在 electron-forge 中找到 .node 文件
- jenkins - Jira Oauth 配置问题
- vue.js - 尝试使用 fetch 执行发布请求时出错