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"
}
}
}
}
}
スキーマを確認する必要がありますか? それとも何かが恋しいですか?助けはありますか?