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版本的
中,您将发现GeoHash和GeoHashQuery,这些e易于转换为C#,从那里您可以转换其余部分并根据需要将其规范化为C#(我使用了core
,但是来自Firebase查询的操作或事件处理程序回调也可以工作…)Chears Sushingover:)在这种情况下你帮了我多少次^^^如果我成功了,我会看一看并发布一个答案。谢谢我终于将整个GeoFire库翻译成了C。现在它工作正常,但需要花费很多精力……我用EventHandlersGlad来听;-)我希望我能分享我的,但这是hir的工作e项目和客户“拥有”翻译5个月后,我才能将其开源(也许您将被允许将其发布到GitHub…)@MaximeEsprit嗨Maxime,有机会分享你的GeoFire库吗?我也希望这样做,但如果已经完成了,当然欢迎LOL!这对你也有好处,因为我还可以测试、修复bug,如果需要,还可以帮助你改进!谢谢System.Reactive
//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);