使用Swift的GeoFire

时间:2017-06-18 02:08:53

标签: swift firebase geofire

我计划使用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?任何帮助,将不胜感激。谢谢。

1 个答案:

答案 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查询可能对您有所帮助的其他视频。