如何根据用户的位置

时间:2018-05-10 14:25:35

标签: firebase react-native geolocation firebase-cloud-messaging

我使用React Native构建了一个购物应用。我们在应用程序上注册了很多来自全国各地的商店和餐馆。

当特定商店根据用户兴趣和发布商发布新优惠时,我们会使用FCM向用户发送消息。如果餐厅发布了优惠,我们将发送给所有在该主题" / restaurants"上注册的用户。这种行为很糟糕,因为餐厅可能离用户太远,这个提议对他来说并不重要。

这就是我想根据地点创建主题的原因,所以如果芝加哥的一家餐馆发布了优惠信息,我会发送给在" / restaurants / chicago"上注册的用户。

这是最好的方法吗? firebase是否提供类似开箱即用的东西?我如何跟踪用户何时从另一个城市离开?

1 个答案:

答案 0 :(得分:0)

TL; DR:粗体文字。

可以创建一个后台服务(每小时一次)获取设备位置。 https://developer.android.com/about/versions/oreo/background-location-limits

Best way to get user GPS location in background in Android

如果您没有位置后台服务,请不要添加位置后台服务。它耗尽了电池。

您应该将位置与FCM分离并使用一点预测。 当他们开始计划访问餐厅并在他们打开您的应用时解析他们的位置/群组时发送通知。

我认为您的应用已启用位置权限。您应该为用户执行的操作是在Firebase数据库(或Cloud FireStore)中存储其过去位置的列表。将这些位置解析为大都市区,邮政编码等。保留计数器以帮助加权此位置(并进行排序)

您还应该存储他们从地图视图中查看的餐馆列表...特别是他们的位置。您要做的是计算距离中心位置的近似距离并创建平均旅行时间。

E.g。我喜欢在距离我住的地方30分钟(平均)的次大都市区吃饭。我也喜欢在下午6点左右吃饭。我需要在下午5:15左右做出我想吃的地方的决定。

您还应该跟踪他们为数据库中的餐馆查看您的应用的时间。了解他们何时开始决定吃饭。

另一个问题是一周中的某一天。例如,因为我住在离好吃饭的地方30分钟,我有时会在当地吃。这些当地的地方将在一周的某些日子被打包。周四他们将被打包,周五将是其中的一半,周六几乎没有。然后周日/周一他们回到周五的水平。这是因为人们更愿意在星期五/星期六晚上开车去城里,但是他们不想做饭,并且会在当地周四外出就餐。

现在是您开始使用Predictions的时候了。 Firebase有一个Predictions模块,和/或您可以编写云功能来组织数据库并安排FCM。

首先,您需要收集数据。一种方法是在打开应用程序的一小时内启动位置服务。希望这会抓住您的用户在他们选择吃的位置(我们称之为标签,对于分析,这可能是转换事件)。另一个诀窍是在一小时内发出通知来评估他们的用餐体验。这不需要位置后台服务,如果他们打开通知,您可以抓住他们的位置。

用户可以在餐厅出示的应用内优惠券可以让您抓住位置。

此外,了解他们喜欢外出就餐的哪几天以及他们在特定日期定位的区域。

如果用户位于不同的大城市区域,那么等到他们打开应用程序将允许您显示相关的订阅。我飞到西雅图,下午4点挨饿。

尽可能多的数据点(功能)(星期几,一天中的时间,一个月中的一天,一周中的一天,到当地餐馆的平均距离,到地铁餐厅的平均距离,is_holiday,average_notification_open,average_time_at_restaurant)数据标签(Eat_locally,eat_metro,Eat_home)您应该能够开始将用户分为不同的组。

因此,在用户平均进食时间前1小时,您应该执行一些服务器端计算,以确定用户可能吃的位置。例如,如果他们在周四晚上吃饭,你应该根据当地餐馆的平均距离安排FCM。

永远不要将特定用户汇集到特定的餐馆。即使您不在欧盟运营(涵盖其公民),也要遵守GDPR。对您的数据收集策略保持透明,并始终尝试匿名/随机化。