使用 Parse 的基于位置的推送通知

Posted

技术标签:

【中文标题】使用 Parse 的基于位置的推送通知【英文标题】:Location Based Push Notifications using Parse 【发布时间】:2015-04-27 16:59:18 【问题描述】:

我正在开发一个应用程序,该应用程序向推送源 1 英里范围内的所有用户发送推送通知。有很多关于使用 Parse 进行基于位置的推送通知的好文档。我打算使用下面的代码(或类似的代码)来发送我的推送。

// Find users near a given location
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"location" 
nearGeoPoint:stadiumLocation    
withinMiles:[NSNumber numberWithInt:1]]

// Find devices associated with these users 
PFQuery *pushQuery = [PFInstallation query];
[pushQuery whereKey:@"user" matchesQuery:userQuery];

// Send push notification to query
PFPush *push = [[PFPush alloc] init];
[push setQuery:pushQuery]; // Set our installation query
[push setMessage:@"Free hotdogs at the Parse concession stand!"];
[push sendPushInBackground];

为了执行这个推送查询,我需要将每个用户的当前位置准确地存储在 Parse 数据库中。我计划使用 CoreLocation 来执行此操作,并且每次应用程序收到位置更改通知时,它都会更新用户在 Parse 数据库中的位置。这是最好的方法吗?我想象一个用户在全国旅行,他们的手机每英里更新一次解析数据库。是这种行为吗?这将需要每个用户非常频繁地更新 Parse 数据库。

我错过了什么吗?这真的是最好的方法吗?感谢您提供任何帮助或更好的想法。

【问题讨论】:

我认为您走在正确的轨道上,尽管您最终可能会达到解析请求数量的限制将允许免费计划,因此您可能需要考虑规模您的项目以及自定义设置是否更适用。 感谢您的回复。达到解析限制正是我担心的。如果我没有正确实施行为,我尤其不想达到极限。但似乎我是,所以我可能需要重新考虑设置。谢谢! 您不会立即达到免费计划的限制(30req/秒),这完全取决于您期望拥有的活跃用户数量 【参考方案1】:

您也可以使用 Apple 的显着LocationChange API,它只会在移动信号塔发生变化时触发位置变化。这可以减少您必须执行的位置更新次数,同时仍然保持对用户位置的看似良好的测量。

在代码中,这看起来像这样:

    [locationManager startMonitoringSignificantLocationChanges];

文档位于:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

此外,您需要请求权限以在后台跟踪位置,这需要在 Info.plist 文件中声明。

您还可以在客户端进行一些计算,以查看新点与当前存储点的距离,并且仅在距离大于某个阈值时才更新 Parse 数据库。这将减少您的 Parse requests/sec 并使您保持在免费的 30req/s 范围内。

【讨论】:

我认为使用 startMonitoringSignificantLocationChanges 是我要走的路。我也喜欢你在更新解析之前计算距离阈值的想法。我的结论是,基于位置的推送通知非常耗费资源,因此使用它对应用程序来说非常重要。 这绝对是真的。位置跟踪很昂贵,但对用户来说可能是非常有益的

以上是关于使用 Parse 的基于位置的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap + iOS + Parse 推送通知

使用 MobileFirst 的基于位置的推送通知

如何使用 Parse.com Cloudcode 发送推送通知

Parse:从应用发送推送通知

Parse.com - 为单个用户设置推送通知

Parse.com 的地理推送通知