4

我有一个iPhone应用程序,如iPhone的Facebook。我的应用程序必须连接我的服务器并定期每隔两小时读取一次所有消息我有一个线程来读取所有消息,但是当应用程序终止时线程无法工作。线程可以从主委托中独立运行,或者如何找到解决此问题的解决方案?IOS后台工作

回答

6

你不能让你的应用在后台做东西。有一个API可以完成像上传照片一样的任务,但即使这样做也会在大约10分钟后死亡。

Apple Push Notification Service似乎是最适合您的问题的解决方案。您的服务器通知设备有新的事情发生,并在用户打开应用程序时获取实际消息。

编辑:从iOS 7开始,Apple实施了一项功能,您可以安排正在运行的任务在后台获取数据。这些任务不保证在任何特定时间运行。请参阅下面的release notes for iOS 7和链接的方法:

应用程序,定期通过联系服务器更新他们的内容可以 系统注册,并定期推出来检索背景 内容。要注册,请在应用程序的Info.plist文件中包含具有提取值的UIBackgroundModes 键。然后,当您的应用程序启动时,请拨打setMinimumBackgroundFetchInterval: 方法确定它接收更新消息的频率。最后, 您还必须在您的应用 委托中实施 application:performFetchWithCompletionHandler:方法。

+0

我打算写同样的,但@klaustopher是第一个。如果您有iOS开发人员订阅,您可以观看WWDC视频或文档。他们在那里解释得非常清楚。 –

+0

我试过NSNotification,但是如果没有新消息到指定的时间,NSNotification不会再运行一次。是否有任何示例代码,您可以分享吗? – BeyazBaron

+0

有很多例子说明如何实现推送通知服务。如果你还写了服务器代码,只需google“apple推送通知服务{你的语言}”。如果您无法访问服务器,则需要创建某种在服务器上定期运行的代理服务器,从原始服务器提取信息并将信息推送给用户iPhone – klaustopher

2

没有解决方案。

Apple不允许应用程序在后台运行,除非它们属于特定类型,例如位置或音频或voip或者新站点(如果应用程序使用shouldBeginBackgroundTaskWithExpirationHandler,它可以在活动后继续运行约10分钟) 。

没有解决方法,许多其他人都想知道如何做和以前一样的事情,但没有合法的方法。您的应用程序无法安排任何类型的定期回拨活动。

一旦进入暂停或终止状态,您的应用程序可以运行的唯一方式是让用户启动它,无论是显式还是响应本地通知或远程推送通知。