首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 10在应用程序后台发布HTTP

iOS 10在应用程序后台发布HTTP
EN

Stack Overflow用户
提问于 2016-10-26 14:18:03
回答 1查看 1.2K关注 0票数 0

我是iOS开发的新手,我正在开发一个Swift 3/ iOS 10应用程序,它收集全球定位系统的位置数据,并在地图上显示用户的位置。该应用程序还通过HTTP将位置数据发送到web服务器。数据的传输发生在用户可配置的间隔上,从每分钟一次到每小时一次不等。简而言之,这基本上就是我所做的:

代码语言:javascript
复制
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.last {
        // determine if it's time to send the location data
        // if so, create new job and send it to job manager for execution
        // this job performs the following:
           // serialize location data to protobuf
           // encrypt protobuf
           // HTTP POST encrypted data to web server
    }
}

上面提到的作业管理器基本上是一个队列,1)在领域数据库中持久化作业,2)以FIFO顺序执行作业。

到目前为止,这似乎如预期的那样起作用。然而,我注意到当用户按下home按钮,我的应用程序被发送到后台/被挂起时,我继续得到位置更新,但是我的HTTP似乎最终停止工作。

我使用Alamofire 4.0.1来制作HTTP。我已经将登录添加到代码中,并且每次都会调用web请求:

代码语言:javascript
复制
NSLog("About to POST location data...")
// urlRequest.body = encrypted protobuf
alamoFireSessionManager.request(urlRequest).validate().responseJSON() {
    NSLog("Inside response JSON handler!")
    if response.result.isSuccess {
        NSLog("HTTP POST was successful!")
    } else {
        NSLog("HTTP POST failed!")
    }
}

正如我所说的,当我的应用程序被发送到后台/被挂起时,我会继续获得位置更新,并且在一段时间内,HTTP继续正常工作(我可以看到服务器上接收到的位置数据)。但是,最终,我不再看到服务器上的数据是POSTed,并且没有看到Alamofire响应JSON处理程序执行的任何代码。在我的应用程序日志中,我始终看到字符串"About to POST location data...",但最终"Inside response JSON handler!"消息不再出现。

正如我所说的,我对iOS相当陌生,所以我可能缺少一些关于操作系统如何处理后台操作的基本内容。这种行为是否表明iOS允许我的应用程序在后台正常工作一段时间,然后阻止它最终进行网络呼叫?如果是的话,在应用程序处于后台时,是否有另一种方法可以可靠地在特定的时间间隔内执行重复的HTTP?

EN

回答 1

Stack Overflow用户

发布于 2016-10-26 14:27:16

转到'Capabilities‘下的目标设置的应用程序,启用背景模式,并检查标记的背景获取。试一次,希望它对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40264748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档