2016-11-25 6 views
0

Geofireのgithubフィッシュの例を見てきましたが、アプリ内での実装方法はまだ不明です。 私の使用例:私のアプリは、ログインしたユーザーにイベント/会合を表示します。現在、私のアプリの中にはfirebase ref(events)のfirebase listenerがあります。Geofireと既存のfirebaseデータベースとの統合

database.ref('events').orderByChild('startTime').on('value', (snapshot) => { 
const feed = snapshot.val() || {} 
}) 

現在、初期負荷で、クライアントアプリケーションがイベントにオブジェクト全体をフェッチし、イベントデータの各表において、ユーザ(各行イベント)に表示され、その後refと。

geofireでは、set()関数を使用して各イベントキーをジオロケーション[lat、lng]とともに保存できることを理解しています。そして、クエリを使用して、指定された半径内にあるイベントキーのリストをユーザーの現在の場所(HTML5のジオロケーション)に取得できます。しかし、キーにはデータが付いていないので、イベントリファレンスで個々の "on"リスナーに各イベントキーを設定しますか?イベントデータを表示しますか?

答えて

2

Geofireを使用すると、オブジェクト用のジオデータと実際のデータを持つJSONツリーの2つのブランチが作成されます。

objects 
    objectId1: { ... } 
    objectId2: { ... } 
    objectId3: { ... }  
geodata 
    objectId1: { ... } 
    objectId2: { ... } 
    objectId3: { ... } 

あなたはgeodataノードに対してGeoQueryを発射

、あなたはそのクエリの範囲内のオブジェクトのキーを取り戻します。したがって、たとえば objectId2objectId3です。

次に、そのキーを使用して対応するJSONオブジェクトをobjectsの下で検索します。たとえばkey_enteredを使用している場合:新しいイベントキーは上記のクエリは、クライアントアプリケーションで作成された後(セットを())を使用して、REF geofireに追加されている場合

geoQuery.on("key_entered", function(key, location, distance) { 
    console.log(key + " entered query at " + location + " (" + distance + " km from center)"); 
    ref.child("objects").child(key).once("value", function(snapshot) { 
    console.log(snapshot.val()); 
    }); 
}); 
+0

、それが半径内にある場合だろう「key_entered」クエリ追加と検索キーを検出しますか?また、イベントキーが削除されるのと同じ質問は、キートリガのkey_exitedですか? – jasan

+0

アクティブなGeoQueryの範囲内にある場所に新しいキーが関連付けられている場合、新しいキーは 'key_entered'を起動します。この作業に問題がある場合は、[問題を再現する最小限のコード]を共有してください(http://stackoverflow.com/help/mcve)。 –

関連する問題