2013-02-28 49 views
0

我们正在使用类似groupon的应用程序,当用户进入报价范围时向用户显示警报。处理来自后台的网络呼叫。苹果允许吗?

即使应用程序处于后台,客户端也坚持要发出警报。

由于系统的体系结构,应用程序会定期获取客户端的位置,并在服务器检查是否有新警报。如果是这样,应用程序会在本地数据库中进行一些处理并显示通知。

APN无法使用,因为服务器的更改对于此项目而言是遥不可及的。

我的问题是,苹果是否会接受它的AppleStore,因为我已经阅读相关的各种观点和苹果阻止其用作从iOS开发库

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

这种提取物在唤醒时间,你的应用程序将被放入后台并给予少量时间来处理位置数据。由于您的应用程序位于后台,因此应该尽可能少地完成工作,并避免任何可能阻止其在分配的时间到期之前返回的任务(如查询网络)。如果没有,你的应用程序可以终止

感谢

回答

1

我认为你应该重新考虑你的这个应用程序的方法。这听起来像是你已经决定构建一组功能,这些功能不一定非常适合应用程序运行的设备的特征。

你写到“应用程序每隔n分钟就会获取一个位置”,但这不是iOS位置服务的工作原理。偶尔为当前位置查询位置服务是一种很好的方法,当您的应用程序在前台运行时,一旦它被暂停或终止,这不是一个选项。相反,您需要以某种准确性级别订阅位置事件,并且在设备位置发生变化时,您的应用将收到通知。对于您收到这些事件的时间表没有任何保证,并且这取决于您请求的准确性和设备移动的速度。

此外,获取位置是一项昂贵的操作,可能会迅速耗尽设备的电池。在一两个小时内通过用户可用的电池电量进行刻录是快速卸载应用程序的好方法。在可能的情况下,您应该使用重要的位置更改服务,以最小的功耗获取低精度的位置更新。如果您需要更高的精确度,那么请考虑使用定义区域的边界交叉事件,或至少尽可能降低您请求的精度。

由于所有这些,你仍然需要在有限的时间内工作,一旦位置更新启动,你的应用必须运行。这可能不够长,无法往返服务器。如果网络连接已经处于活动状态,并且设备的延迟时间较短,您可能会在某些时候收到响应,但我希望能够频繁地看到应用程序终止了应用程序。发生这种情况时,我不知道您会继续收到位置更新,否则可能会重新启动该应用。

除非下载警报列表并在本地显示警报,否则更好的解决方案可能是尝试通过UDP将当前位置发送到服务器,当您发现重大的位置更改时。这样,您可以在不等待响应的情况下发出网络请求。只有其中一些请求仍会成功,但至少您的应用不会被终止。然后,您可以处理在服务器上收到的位置,并在适当时发送推送通知。

我意识到你似乎无法进行服务器端更改。在这种情况下,您可能能够做的最好的事情就是在应用程序运行时为附近区域预先获取警报(并且如果您曾设法在后台完成往返)。通过这种方式,您可以将位置更新与该列表进行比较,而无需在每次位置更新时触发网络请求。不幸的是,这听起来像你可能会被支持到一个角落,在目前的限制下没有可靠的解决方案。

+0

谢谢,约拿和@yeesterbunny。我想现在我可以更好地了解问题,然后回到客户手中。 – JAC 2013-02-28 03:48:27

2

多久你的应用程序从用户那里得到的位置?根据苹果公司的Background Execution and Multitasking,如果您定期获得位置更新(我认为它不到10分钟),如果您在info.plist中添加locationUIBackgroundModes,您的应用仍可以在后台处理。通过这些CLLocation坐标,您可以处理您的Web服务请求。

我个人还没有做过这样的事情,所以我无法确定苹果是否会拒绝你的应用程序。但是,如果所有内容都符合Apple制定的准则和要求,我不明白他们为什么会拒绝您的应用程序。

编辑

从Apple DOC:

,提供连续的位置更新给用户(甚至在后台时 )的应用程序可以通过 启用后台位置服务包括其 Info.plist文件中的UIBackgroundModes项(包含位置值)。将此值包含在UIBackgroundModes 密钥中并不排除系统暂停应用程序,但 会告知系统,只要有新的 位置数据要传递,它就应该唤醒应用程序。因此,该键有效地让应用程序在后台运行 ,以在发生位置更新时处理它。

我猜即使应用程序被暂停,每当有新的位置数据要传递时,它也会被唤醒。

+0

应用程序每n分钟获取一个位置,其中n由服务器发送的参数定义。通常每五分钟完成一次,但可以动态更改。 – JAC 2013-02-28 02:32:28

+0

我编辑了我的答案。根据Apple文档,即使您的应用程序被暂停,它仍会在有新的位置数据可用时唤醒。 – yeesterbunny 2013-02-28 02:45:24