2017-06-18 39 views
1

我打算使用GeoFire根據位置過濾我的Firebase數據。不知道該如何開始,因爲我剛開始開發。我有一個事先知情同意和字幕等,我在一個類中創建具有:GeoFire與Swift

@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)我把它保存到火力地堡與

func share(newMedia: Media) { 
      DatabaseReference.users(uid: uid).reference().child("media").childByAutoId().setValue(newMedia.uid) 
     } 

我在哪裏實例GeoFire參考?我是否必須使用Core Location來獲得我自己的經緯度?任何幫助,將不勝感激。謝謝。

回答

0

添加GeoFire

與吊艙安裝 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")) 

要獲取當前用戶位置創建對它的引用您可以使用位置經理通過可可豆莢: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其他影片可以幫助您進一步上。