iPhone - 在后台连接服务器

8
我正在开发一款连接到服务器并发送文本的应用程序。如果有网络(无论是WiFi还是3G),它将立即将文本发送到服务器。但是,如果没有网络,它会每5分钟轮询服务器连接。所有这些部分都很好地工作。
但是,在使用iPhone 4设备时,我希望该应用程序在进入后台时检查服务器连接。因此,当应用程序进入后台且网络恢复时,必须能够将文本发送到服务器。
我该如何实现?我已经看到一些应用程序声称可以在后台上传照片到服务器。他们是如何做到的?
4个回答

15

我建议您认真阅读苹果公司的这篇文章,特别是其中的在后台完成有限长度任务章节。

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

需要澄清的一点:

  • 一旦您的应用程序在后台被操作系统冻结,则没有办法让您的应用程序自行唤醒并重新连接到互联网
  • 然而,根据上述苹果公司的文章,在后台时,您可以从应用程序委托中调用此beginBackgroundTaskWithExpirationHandler方法申请额外的时间,也就是说,虽然您的应用程序不能自行在后台唤醒,但在后台且没有被冻结时,它可以尝试申请额外的时间来完成其长时间运行的任务。

希望这可以帮到您。


2
我认为flayvr使用了一个技巧。如果你下载并使用该应用程序,你会发现他们要求你启用位置服务。这是为什么呢?因为即使应用程序被终止,他们也希望在后台让你完成一些操作(将新拍摄的照片制作成相册),他们是如何做到的呢?他们使用了显著位置变化的功能,当有人移动一定距离(大约500米)时,每个已注册此功能的应用程序都会被唤醒执行一项快速任务,并在几秒钟内被终止。因此,你的应用程序也可以注册该事件,当显著位置变化事件发生时,你就能够快速地将文本发送到服务器。希望这能帮到你。

2

现在,您可以使用 iOS7 中的后台获取(Background Fetch)来完成这项任务。点击此处查看相关文章。

然而,您只有 30 秒的时间来完成任务。根据上面提到的文章,还有另一种解决方案,叫做后台传输服务(Background Transfer Service)

如果需要更多时间,则可以使用后台传输服务 API。


1
在Xcode中创建一个新项目,你会发现在应用程序委托文件中自动生成了一堆新的方法,比如applicationDidEnterBackground、applicationWillEnterForeground等。
阅读描述后,你需要调用线程将数据上传到服务器。

当应用程序进入后台时,线程如何仍然运行? - Satyam
你读过Diwup在上面的帖子中给出的链接吗? 它有一个“实现长时间运行的后台任务”的部分。我从未使用过它,苹果的文档应该足以开始。 - k-thorat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接