0

我们正在开发一个类似 groupon 的应用程序,当用户进入报价范围时,会向用户显示警报。

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

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

无法使用 APN,因为此项目无法更改服务器中的更改。

我的问题是 Apple 是否会在 AppleStore 中接受它,因为我已经阅读了关于它的不同意见,并且 Apple 不鼓励使用它,正如 iOS 开发者库的摘录中一样

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

在唤醒时,您的应用程序将进入后台并给予少量时间来处理位置数据。因为您的应用程序在后台,所以它应该做最少的工作并避免任何可能阻止它在分配的时间到期之前返回的任务(例如查询网络)。如果没有,您的应用程序可能会被终止

谢谢

4

2 回答 2

2

您的应用多久从用户那里获取位置信息?根据 Apple 的Background Execution and Multitasking,如果您定期获取位置更新(我认为不到 10 分钟),如果您添加locationUIBackgroundModes您的info.plist. 有了这些CLLocation坐标,您就可以处理您的 Web 服务请求。

我个人没有做过这样的事情,所以我不能肯定地告诉你苹果是否会拒绝你的应用程序。但是,如果一切都在 Apple 设定的指导方针和要求之内,我不明白他们为什么会拒绝您的应用程序。

编辑

来自苹果文档:

为用户提供持续位置更新(即使在后台)的应用程序可以通过在其 Info.plist 文件中包含 UIBackgroundModes 键(带有位置值)来启用后台位置服务。在 UIBackgroundModes 键中包含此值不会阻止系统挂起应用程序,但它确实告诉系统它应该在有新的位置数据要传递时唤醒应用程序。因此,此键有效地让应用程序在后台运行,以便在位置更新发生时处理它们。

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

于 2013-02-28T02:27:37.633 回答
1

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

您写道“应用程序每 n 分钟获取一次位置”,但这不是 iOS 定位服务的工作方式。当您的应用程序在前台运行时,偶尔查询当前位置的位置服务是一种好方法,但一旦暂停或终止,这不是一个选项。相反,您需要以某种程度的准确度订阅位置事件,并且当设备的位置发生变化时,您的应用会收到通知。无法保证您收到这些事件的时间表,它会根据您要求的准确性和设备移动的速度而有所不同。

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

有了所有这些,您仍然需要在有限的时间内工作,一旦通过位置更新启动您的应用程序就必须运行。这可能不足以往返服务器。如果网络连接已经处于活动状态并且设备恰好具有低延迟,您可能会在某些时候收到响应,但我希望看到应用程序经常被操作系统终止。发生这种情况时,我不知道您是否会继续收到位置更新,否则可能会重新启动该应用程序。

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

我意识到您似乎无法进行服务器端更改。在这种情况下,您可以做的最好的事情是在应用程序运行时预先获取附近区域的警报(如果您曾经设法在后台完成往返)。这样,您可以将位置更新与该列表进行比较,而无需在每次位置更新时触发网络请求。不幸的是,听起来您可能会陷入困境,在您当前的限制下没有可靠的解决方案可用。

于 2013-02-28T03:35:25.950 回答