我们正在使用类似groupon的应用程序,当用户输入要约范围时,该提醒将显示给用户。
即使应用程序在后台,客户端也坚持要发出警报。
由于系统的体系结构,该应用程序会定期获取客户端的位置,并与服务器一起检查是否有任何新警报。如果是这样,该应用程序将在本地数据库中进行一些处理并显示一条通知。
无法使用APN,因为此项目无法进行服务器中的更改。
我的问题是苹果是否会在AppleStore中接受它,因为我已阅读过有关它的不同意见,并且苹果不鼓励使用它(如iOS开发者库中的摘录所述)
http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html
唤醒时,您的应用程序将进入后台,并留出少量时间来处理位置数据。因为您的应用程序在后台,所以它应该做的工作最少,并且避免任何可能阻止其在分配的时间到期之前返回的任务(例如查询网络)。否则,您的应用可能会终止
谢谢
最佳答案
我认为您应该重新考虑针对此应用程序的方法。听起来您已经决定构建一套功能,这些功能不一定能很好地了解或适合运行该应用程序的设备的特性。
您写道“该应用每n分钟获取一次位置”,但这不是iOS位置服务的工作方式。当您的应用程序在前台运行时,偶尔查询位置服务是一种好方法,但是一旦挂起或终止,则不是一种选择。取而代之的是,您需要以某种程度的准确性来订阅位置事件,并且当设备位置发生变化时,您的应用会收到通知。我们无法保证您会收到这些事件的时间表,具体取决于您要求的准确性和设备移动的速度。
此外,获取位置是一项昂贵的操作,并且可能很快耗尽设备的电池电量。在一两个小时内消耗掉用户可用的电池电量是一种快速卸载应用程序的好方法。在可能的情况下,您应该使用重要的位置更改服务,以最低的功耗获得低精度的位置更新。如果需要更高的精度,则考虑对定义的区域使用边界穿越事件,或者至少降低您所要求的精度。
有了这些所有功能,您仍然需要在有限的时间内工作,因为位置更新启动后,您的应用必须运行。这可能还不够长,无法往返于服务器。如果网络连接已经处于活动状态,并且设备恰巧具有低延迟,那么您可能会在某些时候得到响应,但是我希望看到该应用经常被操作系统终止。发生这种情况时,我不知道您将继续收到位置更新信息,否则可能会重新启动该应用程序。
与下载警报列表并在本地显示警报相比,更好的解决方案可能是尝试在看到重大位置更改时尝试通过UDP将当前位置发送到服务器。这样,您可以在不等待响应的情况下触发网络请求。这些请求中只有一部分仍然会成功,但至少您的应用程序不会被终止。然后,您可以处理在服务器上收到的位置,并在适当时发送推送通知。
我意识到您似乎无法进行服务器端更改。在这种情况下,您可能能够做的最好的事情就是在应用运行时(并且如果您曾经在后台完成一次往返)预取附近区域的警报。这样,您可以将位置更新与该列表进行比较,而无需在每次位置更新时都触发网络请求。不幸的是,听起来您可能会陷入困境,在当前的限制下没有可靠的解决方案。