在后台轮询服务器的正确方法

Nei*_*fey 17 iphone multitasking

假设这是可能的,我希望我的iOS应用程序在后台运行时轮询服务器(即基本上每隔30分钟检索一次URL的内容并通知用户它是否包含"有趣"的内容),基本上以类似的方式如果您没有使用推送通知,内置邮件客户端的工作方式.

现在,从我到目前为止的阅读(我是一位经验丰富的程序员,但对iOS新手),我认为可能有两种可能的方法:

  • 方法1:在applicationDidEnterBackground:中,启动执行定期轮询的后台任务;
  • 方法2:向您自己的应用程序发送一个没有可见文本的UILocalNotification给用户,但这只是用于在X分钟内唤醒您的应用程序以进行轮询(然后为下一个时间发送自己的另一个通知等).

我在Apple的调度,注册和处理通知的文档中看到,他们实际上似乎有一个示例usign方法1(他们的"聊天"示例,清单2-2).但令人惊讶的是,这种方法似乎只是坐在一个连续的循环中进行轮询,没有干预睡眠; 在我更熟悉的平台上,这是不可取的,会烧掉CPU.

因此,我的问题的子部分基本上是: - 方法2是否可行(或UILocalNotification 必须始终对用户造成可见警报,这不是我想要的),如果是这样,建议的方法是这样做吗? - 如果要做到这一点的方法是方法1,那么Apple的"聊天"示例是坐在一个连续的循环中实际上是好的(例如,iOS配给CPU以使这不是问题),如果不是这样的话iOS告诉后台进程"睡眠时间为X秒/分钟"?如果Apple的连续循环无论出于何种原因都可以,那么轮询之间的时间间隔是什么呢?

NB我很欣赏能够在后台运行本质上是iOS 4的功能.我不介意我的应用程序是否只能在iOS 4中运行.

jer*_*jer 14

你想做什么,不在iOS4的多任务处理功能之下.只允许少数类型的应用程序在后台运行很长一段时间(超过10分钟),而通用网络应用程序不是其中之一.

但是,一切都不会丢失.你可以做什么,我认为你应该做的是使用推送通知.在您的服务器上,您链接苹果的推送通知服务,用户注册推送通知,您要么知道"有趣的数据"是什么,或者他们告诉您.当该数据可用时,您可以通过推送通知立即将其发送给用户.

它提供了更好的用户体验,您的应用程序不需要在后台运行.iOS将处理推送通知的传递.如果他们在收到通知时滑动以解锁手机,您的应用将会打开,此时,您可以在应用中加载有用的信息.

您的方法1将无法长期运行,即使您设法暂停输入一段时间,这就是原因:启动后台任务运行任务的时间不超过10分钟,除非您是三种类型之一允许保持运行的应用程序.10分钟后,操作系统将暂停您.

你的方法2根本不起作用.所有本地通知都向用户显示警报视图.