如何根据用户的位置发送 FCM
Posted
技术标签:
【中文标题】如何根据用户的位置发送 FCM【英文标题】:How to send FCM based on user's location 【发布时间】:2018-05-10 14:25:34 【问题描述】:我使用 React Native 构建了一个购物应用。我们有很多来自全国各地的商店和餐馆在我们的应用上注册。
当特定商店发布新优惠时,我们会根据用户兴趣和发布者使用 FCM 向用户发送消息。如果餐厅发布了优惠,我们将发送给所有在主题“/restaurants”上注册的用户。这种行为是不好的,因为可能餐厅离用户太远,而这个提议对他来说并不重要。
这就是我想根据位置创建主题的原因,所以如果芝加哥的一家餐厅发布优惠,我会只发送给在“/restaurants/chicago”上注册的用户。
这是最好的方法吗? firebase 是否提供类似的开箱即用功能?我如何跟踪用户以了解他们何时从另一个城市离开另一个城市?
【问题讨论】:
这是一个相当广泛的话题。首先,您必须将每家餐厅的位置存储在数据库中。然后你必须know the user's location。最后,你必须query for restaurants close to the user。 【参考方案1】: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)中。将这些位置解析为大都市区、邮政编码等。保留一个计数器以帮助对该位置进行加权(和排序)
您还应该存储他们从地图视图中查看的餐厅列表……特别是他们的位置。您要做的是计算距中心位置的大致距离并创建平均行程时间。
例如我更喜欢在距离我住的地方(平均)30 分钟车程的次大都市地区用餐。我也喜欢在下午 6 点左右吃饭。我需要决定下午 5:15 左右去哪里吃饭。
您还应该跟踪他们在数据库中查看您的餐厅应用的时间,以了解他们何时开始决定吃饭。
另一个问题是星期几。例如,因为我住的地方离吃饭的好地方 30 分钟路程,所以我有时会在当地吃饭。这些当地的地方将在一周中的某些日子被打包。周四他们将被打包,周五将是其中的 1/2,而周六几乎没有。然后周日/周一他们又回到周五的水平。这是因为人们更愿意在周五/周六晚上开车去城里,但他们不想做饭,会在周四在当地外出就餐。
现在是您开始使用预测的时候了。 Firebase 有一个预测模块,和/或您可以编写云函数来组织您的数据库和安排 FCM。
首先,您需要收集数据。一种方法是在他们打开您的应用程序的一小时后启动定位服务。希望这能捕捉到您的用户在他们选择就餐的位置(我们将其称为标签,对于分析,这可能是一个转化事件)。另一个技巧是在一小时内启动通知以评估他们的用餐体验。这不需要位置后台服务,如果他们打开通知,您就可以获取他们的位置。
拥有用户可以在餐厅出示的应用内优惠券可以让您获取位置。
此外,了解他们喜欢在一周中的哪几天外出就餐,以及他们在这些特定日子的目标区域。
如果用户位于不同的大都市区,则等到他们打开应用后,您才能显示相关订阅。我飞往西雅图,下午 4 点就饿死了。
给定尽可能多的数据点(特征)(星期几、一天中的某个时间、一个月中的某天、两周中的某天、到当地餐馆的平均距离、到地铁餐厅的平均距离、is_holiday、average_notification_open、average_time_at_restaurant)和数据标签(Eat_locally、eat_metro、Eat_home)你应该能够开始将用户分类到不同的组。
因此,在您的用户平均用餐时间前 1 小时,您应该执行一些服务器端计算以确定您的用户可能在哪里用餐。例如,如果他们在星期四晚上就餐,您应该根据当地餐馆的平均距离安排 FCM。
切勿将特定用户引导至特定餐厅。即使您不在欧盟经营,也要遵守 GDPR(它涵盖了他们的公民)。对您的数据收集策略保持透明,并始终尝试匿名/随机化。
【讨论】:
以上是关于如何根据用户的位置发送 FCM的主要内容,如果未能解决你的问题,请参考以下文章
根据 OneSignal 的用户数据库直接发送 Web 推送 (Chrome - GCM/FCM) 通知