1

iOS アプリから Geofire を使用する方法を見つけようとしています。しかし、ルールの定義については失敗しました。

これは私のデータセットがどのように見えるかです:

offers:{ 
   user1:{
     name : "Steph",
     position : { 
         g:"xxxx",
         l: {
              0: 48.8795522,
              1: 2.3568256
         }
     }
  },
  user2:{
    name:"John",
    position:{ 
       g:"yyyy",
       l: {
          0: 48.8795528,
          1: 2.3568256
       }
    }
  }
}

私のSwiftコードから、私はこれを使用します:

let geoRef = Firebase(url: appDelegate.fireBaseUrl + "/offers"  )
let geoFire = GeoFire(firebaseRef: geoRef)
let center = CLLocation(latitude: 48.8795528, longitude:2.3568256)
let myQuery = geoFire.queryAtLocation(center, withRadius: 0.6)

そして、私はオブザーバーを次のように設定しました:

_ = myQuery.observeEventType(GFEventTypeKeyEntered, withBlock: { (key: String!, position: CLLocation!) in
      print("Key '\(key)' entered")
    })
_ = myQuery.observeEventType(GFEventTypeKeyMoved, withBlock: { (key: String!, position: CLLocation!) in
      print("Key '\(key)' moved")
    })
_ = myQuery.observeEventType(GFEventTypeKeyExited, withBlock: { (key: String!, position: CLLocation!) in
      print("Key '\(key)' exited")
    })

そして、次のようにユーザーの場所を設定するために GeoFire メソッドを使用します。

geoFire.setLocation(CLLocation(latitude: myAdresse.Latitude, longitude: myAdresse.Longitude), forKey: "position")

しかし、このメッセージが表示されます
[Firebase] Using an unspecified index. パフォーマンスを向上させるために、/offers に ".indexOn": "g" をセキュリティ ルールに追加することを検討してください。

ルールのいくつかの組み合わせを試しました..

{
  "rules": {
  "offers":{
    ".read": true,
    ".write": true,
    "$users": {
        "position":{
        ".indexOn":"g"
        }
     }
   }
 }
}

スキーマを確認する必要がありますか? それとも何かが恋しいですか?助けはありますか?

4

1 に答える 1

1

私はあなたが探していると思います:

{
  "rules": {
  "offers":{
    ".read": true,
    ".write": true,
    "$users": {
      ".indexOn":"position/g"
     }
   }
 }
}
于 2015-12-10T00:09:30.610 に答える