Firebase 在Xamarin.Forms中使用Geofire

Firebase 在Xamarin.Forms中使用Geofire,firebase,xamarin,firebase-realtime-database,xamarin.forms,geofire,Firebase,Xamarin,Firebase Realtime Database,Xamarin.forms,Geofire,我正在创建一个应用程序,在地图上围绕用户当前位置显示体育活动。 体育活动存储在Firebase数据库中。有超过1.5万个活动 为此,我在一个Xamarin.Forms项目中使用了Firebase和Geofire:我使用了两个nuget包:FirebaseAuthentication.net和FireSharp 我在身份验证方面没有任何问题 但我对FireSharp的使用非常有限:它使用Firebase的RESTAPI,并且不像GeoFire那样针对地理查询进行优化 这是GeoFire: 这是Fi

我正在创建一个应用程序,在地图上围绕用户当前位置显示体育活动。
体育活动存储在Firebase数据库中。有超过1.5万个活动

为此,我在一个Xamarin.Forms项目中使用了Firebase和Geofire:我使用了两个nuget包:FirebaseAuthentication.net和FireSharp

我在身份验证方面没有任何问题

但我对FireSharp的使用非常有限:它使用Firebase的RESTAPI,并且不像GeoFire那样针对地理查询进行优化

这是GeoFire:

这是FireSharp:

例如,使用GeoFire,查询“围绕lat/lon的所有体育活动”非常简单(这是一个nativ Android示例):

它使用1个Http请求以300ms的时间返回完整的对应活动

对于FireSharp,要做到这一点,我需要:

  • 1:使用lat lon和“Geo哈希”查询GeoFire对象:

    //构建查询
    QueryBuilder query=QueryBuilder.New().OrderBy(“g”).StartAt(geohash1.EndAt(geohash2);
    //使用FireSharp发送Http查询
    var response=wait Instance.m_firebaseActitieApp.GetAsync(“活动位置”,查询);
    //从服务器反序列化响应并构造GeoFire对象列表
    var results=JsonConvert.DeserializeObject(response.Body);
    foreach(结果中的var项目)
    添加(新的GeoFireActivity(){IdActivity=item.Key,GeoActivity=item.Value});
    
  • 2:浏览返回的GeoFire对象,并对每个对象发出Http请求以检索完整的对应对象:

    //Browse every GeoFire objects
    foreach (var GeoAct in GeoActivities)
    {
        //Send a Http request with FireSharp to get the sport activity object
        var response = await Instance.m_firebaseActivitieApp.GetAsync(WebUtility.UrlEncode("activites/" + GeoAct.IdActivity);
    
       //Deserialize the result from the server and construct the sport activity object
       Activite res = JsonConvert.DeserializeObject<Activite>(response.Body);
    
    //浏览每个GeoFire对象
    foreach(地理活动中的var GeoAct)
    {
    //使用FireSharp发送Http请求以获取体育活动对象
    var response=await Instance.m_firebaseActitieApp.GetAsync(WebUtility.UrlEncode(“activites/”+GeoAct.IdActivity);
    //从服务器反序列化结果并构造sport activity对象
    Activite res=JsonConvert.DeserializeObject)


    请帮助!:-)

    我在C#中使用了GeoFire,因为FirebaseDB在许多客户端之间共享,我需要创建一个C#管理工具。这是关于如何对字符串哈希进行地理编码,从而可以查询,并且完全不受语言影响。在Java版本的
    core
    中,您将发现GeoHash和GeoHashQuery,这些e易于转换为C#,从那里您可以转换其余部分并根据需要将其规范化为C#(我使用了
    System.Reactive
    ,但是来自Firebase查询的操作或事件处理程序回调也可以工作…)Chears Sushingover:)在这种情况下你帮了我多少次^^^如果我成功了,我会看一看并发布一个答案。谢谢我终于将整个GeoFire库翻译成了C。现在它工作正常,但需要花费很多精力……我用EventHandlersGlad来听;-)我希望我能分享我的,但这是hir的工作e项目和客户“拥有”翻译5个月后,我才能将其开源(也许您将被允许将其发布到GitHub…)@MaximeEsprit嗨Maxime,有机会分享你的GeoFire库吗?我也希望这样做,但如果已经完成了,当然欢迎LOL!这对你也有好处,因为我还可以测试、修复bug,如果需要,还可以帮助你改进!谢谢
    //Build the query
    QueryBuilder query = QueryBuilder.New().OrderBy("g").StartAt(geohash1).EndAt(geohash2);
    
    //Send the Http query with FireSharp
    var response = await Instance.m_firebaseActivitieApp.GetAsync("activites_locations", query);
    
    //Deserialize the response from server and construct the list of GeoFire objects
    var results = JsonConvert.DeserializeObject<IDictionary<string, GeofireObject>>(response.Body);
    foreach (var item in results)
            GeoActivities.Add(new GeoFireActivity() { IdActivity = item.Key, GeoActivity = item.Value });
    
    //Browse every GeoFire objects
    foreach (var GeoAct in GeoActivities)
    {
        //Send a Http request with FireSharp to get the sport activity object
        var response = await Instance.m_firebaseActivitieApp.GetAsync(WebUtility.UrlEncode("activites/" + GeoAct.IdActivity);
    
       //Deserialize the result from the server and construct the sport activity object
       Activite res = JsonConvert.DeserializeObject<Activite>(response.Body);