我计划使用GeoFire根据位置过滤我的firebase数据。不知道怎么开始这个,因为我刚刚开始开发。我有一个图片和一个标题等我在一个班级创建:
@IBAction func shareDidTap(_ sender: Any) {
if let image = image, let caption = textView.text {
let newMedia = Media(type: "image", caption: caption, createdBy: user, image: image)
newMedia.save(completion: { (error) in
if let error = error {
self.alert(title: "Oops!", message: error.localizedDescription, buttonTitle: "OK")
} else {
self.user.share(newMedia: newMedia)
在单独的“用户”类(MVC)中,我使用
将其保存到Firebase中 func share(newMedia: Media) {
DatabaseReference.users(uid: uid).reference().child("media").childByAutoId().setValue(newMedia.uid)
}
我在哪里实例化GeoFire参考?我是否必须使用Core Location来获取我自己的Lat和Lon?任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
添加 GeoFire
使用pod安装
pod 'GeoFire', :git => 'https://github.com/firebase/geofire-objc.git'
然后导入到项目import GeoFire
使用
创建对它的引用let rootRef = Database.database().reference()
let geoRef = GeoFire(firebaseRef: rootRef.child("user_locations"))
要获取当前用户位置,您可以通过cocoa pod使用位置管理器:https://github.com/varshylmobile/LocationManager
我猜你想要保存在数据库中的媒体有一个位置。然后使用GeoFire使用GeoFire.setlocation
保存位置
将帖子保存到数据库时调用此方法,GeoFire会使用您的帖子ID处理添加位置的数据库结构。
一个例子:
geoFire!.setLocation(myLocation, forKey: userID) { (error) in
if (error != nil) {
debugPrint("An error occured: \(error)")
} else {
print("Saved location successfully!")
}
}
然后使用CircleQuery
查询位置数据库
您可以给出从给定位置查询数据库的距离的半径(用户位置)
一个例子:
let query = geoRef.query(at: userLocation, withRadius: 1000)
query?.observe(.keyEntered, with: { key, location in
guard let key = key else { return }
print("Key: " + key + "entered the search radius.")
})
我使用的一个非常好的教程是: https://www.youtube.com/watch?v=wr19iKENC-k&t=600s
查看他们的频道并向GeoFire
查询可能对您有所帮助的其他视频。