应用程序在后台时的 NSURLConnection

Posted

技术标签:

【中文标题】应用程序在后台时的 NSURLConnection【英文标题】:NSURLConnection when app is in background 【发布时间】:2012-12-06 16:13:15 【问题描述】:

我想知道当应用处于后台时是否可以发送异步连接。这样做的原因是因为我需要发送用户的位置(从核心位置获取)以在每次位置更改时更新远程服务器中的数据库,即使应用程序不在前台。

我必须为此设置任何权限吗?当应用处于后台时,Apple 是否会拒绝应用处理连接?

提前致谢!!

【问题讨论】:

【参考方案1】:

ios 提供多任务 API,即即使您的应用在后台,也可以访问其中的一些 API。这些服务是 -

    本地通知 背景音频 后台任务 背景位置

因此,当应用不在前台时,您绝对可以使用CoreLocation 发送位置更新。

此链接 - iOS multitasking 具有在应用程序在后台启动服务的代码。分步说明

指定位置背景模式 通过使用UIApplication:beginBackgroundTaskWithExpirationHandler: 在后台使用NSTimer 如果x 时间小于UIApplication:backgroundTimeRemaining,它确实可以正常工作,如果x 较大,则应在没有剩余时间之前再次启用(和禁用)位置管理器以避免后台任务被杀死。这确实有效,因为位置是三种允许的后台执行类型之一。

来源 - How do I get a background location update every n minutes in my iOS application?

【讨论】:

甚至通过 Core Location 委托方法发送 NSURLConnections? 你测试过这个吗?下面的答案说这是不可能的。我在想我可以像@Zerto 建议的那样做,即使用 CoreData 存储所有值并在应用程序处于前台时发送连接。 您只需将位置更新发送到后端服务器并进行处理。是的,这是可能的,我已经做到了。我试图找到代码,但不记得我把它放在哪里了......【参考方案2】:

这里,来自苹果文档 (http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW47)

有几种方法可以在后台跟踪用户的位置,其中大多数实际上并不需要您的应用在后台连续运行:

-显着变化的定位服务(推荐)

-仅前台定位服务

-后台定位服务

但是您不能发送请求,因为唯一可能要做的事情是: -声音的 -地点 -voip -报摊 - 配件和蓝牙连接

所以我猜你可以存储你所有的位置,并在应用程序再次进入前台时使用 NSURLConnection 发送它

【讨论】:

以上是关于应用程序在后台时的 NSURLConnection的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以强制异步 NSURLConnection 在后台调用 connectionDidFinishLoading 吗?

Cordova:在后台运行应用程序时的事件

在后台处理应用程序时的 iOS 推送通知

应用程序未运行时的iOS后台模式?

应用程序在后台时的地理围栏设备

sendAsynchronousRequest:queue:completionHandler:应用程序在后台时失败