2016-11-25 65 views
0

我已经通过github Fish的Geofire示例,但仍不清楚如何在我的应用中实现它。 我的用例:我的应用程序显示登录用户的活动/聚会。目前在我的应用程序中,我在firebase ref(events)上拥有Firebase侦听器。将Geofire与现有的Firebase数据库集成

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

目前,在初始负荷时,客户端应用程序在获取的事件整个对象REF,然后将每个事件数据被显示在一个表中的用户(每行对应的事件)。

我知道,使用geofire我可以使用set()函数来保存每个事件密钥及其地理位置[lat,lng]。然后使用查询我可以检索属于指定半径范围内的用户当前位置(html5地理位置)的事件键列表。但是我该怎么处理这些键,因为没有附加数据,我是否在事件引用中为每个事件键设置了单独的“on”侦听器?然后显示事件数据?

回答

2

当您使用Geofire时,您最终会在您的JSON树中出现两个分支:一个包含对象的地理数据,另一个包含实际数据。

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

当你火对geodata节点GeoQuery,你回来落在该查询范围内的对象的钥匙。因此,例如objectId2objectId3

然后使用该键查找objects下的相应JSON对象。使用例如,当key_entered

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

如果新的事件键添加到geofire裁判的客户端应用程序创建了上面的查询后使用(组()),如果它落在半径范围内的那份“key_entered”查询检测添加和检索密钥?此外,对于事件键被删除的同一问题,密钥触发器的键是否会被删除? – jasan

+0

如果新键与位于活动GeoQuery范围内的位置相关联,它将触发'key_entered'。如果您在完成此工作时遇到问题,请分享[重现问题的最小代码](http://stackoverflow.com/help/mcve)。 –

相关问题