iOS 7+ 应用程序处于非活动状态时是不是可以通过网络发送数据?

Posted

技术标签:

【中文标题】iOS 7+ 应用程序处于非活动状态时是不是可以通过网络发送数据?【英文标题】:iOS 7+ Is it possible for an application to send data via network while app is inactive?iOS 7+ 应用程序处于非活动状态时是否可以通过网络发送数据? 【发布时间】:2014-08-21 16:24:45 【问题描述】:

ios 7+、8(最后一个尚未发布,但针对它)。 该应用程序。 作为用户,我启动应用程序并切换到其他应用程序(邮件、Safari 等),让应用程序运行但不是前台应用程序。 应用通过 Internet 与服务器建立 HTTP 连接,并开始定期向服务器发送 GPS 位置数据(有一定间隔)。

当应用程序不在前台时是否可以?我的意思是,在使用其他应用程序时,是否可以获取地理位置数据并通过 HTTP POST 定期将其从应用程序发送到服务器?

如果答案是“是”,请帮助我提供参考资料。我会进一步调查。

【问题讨论】:

您可以通过将应用程序添加到 pList 来保持应用程序在后台拉取 GPS。有一定数量的属性可以标记应用程序,以便它可以保留在后台(另一个示例是音乐应用程序)。你的问题很难,因为你需要在 HTTP 调用之间关闭 GPS,这样你就不会耗尽电池电量。这意味着您需要在 GPS 关闭时保持应用程序运行。 【参考方案1】:

是的,你要研究的方法是performFetchWithCompletionHandler:

如果您的应用支持获取后台模式,请实现此方法。 当有机会下载数据时,系统会调用 方法让您的应用有机会下载所需的任何数据。您的 执行此方法应下载数据,准备 使用数据,并在completionHandler参数中调用block。

调用此方法时,您的应用最多有 30 秒 挂钟时间来执行下载操作并调用 指定的完成处理程序块。在实践中,您的应用应该调用 完成处理程序块在下载后尽快 需要的数据。如果您没有及时调用完成处理程序,您的 应用程序被终止。更重要的是,系统使用经过的时间 计算应用后台的用电量和数据成本 下载。如果您的应用需要很长时间才能调用完成 处理程序,将来获取数据的机会可能会减少 未来。有关支持后台提取的更多信息 操作,请参阅 iOS App Programming 中的“App States and Multitasking” 指南。

https://developer.apple.com/library/ios/documentation/uikit/reference/uiapplicationdelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:performFetchWithCompletionHandler:

【讨论】:

【参考方案2】:

正如迈克所说,您应该研究后台提取。欲了解更多详情,请查看此objc.io post。

您需要的信息应该在Background Fetch部分。

【讨论】:

以上是关于iOS 7+ 应用程序处于非活动状态时是不是可以通过网络发送数据?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序的状态不活动时是不是可以获得本地通知

如何在应用程序处于非活动状态时获取推送通知ios swift3

应用程序处于非活动状态时无法接收静默通知 iOS

iOS 在应用程序处于非活动状态时处理动态链接

Ios:当应用程序处于非活动状态时,如何让我的应用程序返回根视图

Xamarin.iOS 为啥在设备上调试时 HKAnchoredObjectQuery 处于非活动状态然后停用?