S.M*_*son 3 ios firebase swift geofire firebase-realtime-database
我正在尝试使用GeoFire将坐标存储到Firebase数据库中.
我不确定如何更新新坐标,因为它们将每秒更改/更新.通过它childByAutoId,它为每个Bike生成一个新的唯一ID.
如何参考这个独特的自行车ID?例如,用户将被调用FIRAuth.auth()?.currentUser?.uid.这可能吗?
let geofireRef = FIRDatabase.database().reference().child("Bike").childByAutoId()
let geoFire = GeoFire(firebaseRef: geofireRef)
var data = geoFire?.setLocation(CLLocation(latitude: userIncrementLat, longitude: userIncrementLong), forKey: "BikeId")
Run Code Online (Sandbox Code Playgroud)
我的Firebase数据库结构看起来像......
Root
1. Bike
2. UniqueUID Number (Firebase)
3. BikeId
4. g
l
5. 0:
1:
Run Code Online (Sandbox Code Playgroud)
这是我的Firebase数据库结构,用于逐步更新用户并检索附近的用户以在地图上显示:
db-root
"users" : {
<userUID> : {
"someKey" : "someValue",
...
}
}
"users_location" : {
<userUID> : {
<geofireData> ...
}
}
Run Code Online (Sandbox Code Playgroud)
要使用的变量:
let ref = FIRDatabase.database().reference()
let geoFire = GeoFire(firebaseRef: ref.child("users_location"))
Run Code Online (Sandbox Code Playgroud)
要更新记录的用户位置:
func updateUserLocation() {
if let myLocation = myLocation {
let userID = FIRAuth.auth()!.currentUser!.uid
geoFire!.setLocation(myLocation, forKey: userID) { (error) in
if (error != nil) {
debugPrint("An error occured: \(error)")
} else {
print("Saved location successfully!")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
要查找附近的用户,我使用该findNearbyUsers功能.找到附近的用户并将用户nearbyUsers的UID密钥保存到数组中很有用.该observeReady函数在查询完成后执行,并使用UID检索用户详细信息(我使用此信息在地图上显示用户详细信息).
func findNearbyUsers() {
if let myLocation = myLocation {
let theGeoFire = GeoFire(firebaseRef: ref.child("users_location"))
let circleQuery = theGeoFire!.query(at: myLocation, withRadius: radiusInMeters/1000)
_ = circleQuery!.observe(.keyEntered, with: { (key, location) in
if !self.nearbyUsers.contains(key!) && key! != FIRAuth.auth()!.currentUser!.uid {
self.nearbyUsers.append(key!)
}
})
//Execute this code once GeoFire completes the query!
circleQuery?.observeReady({
for user in self.nearbyUsers {
self.ref.child("users/\(user)").observe(.value, with: { snapshot in
let value = snapshot.value as? NSDictionary
print(value)
})
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
4037 次 |
| 最近记录: |