当 HTTP 请求命中并且应用程序突然进入后台时,iOS 12 URLSession 中断

标签 ios swift nsurlsession urlsession

对于所有 < 12 的 iOS 版本,它都工作正常。 我正在使用基本 URLSession 在我的应用程序中进行测试(iOS ~> 12.x),并尝试使用 Alamofire。

测试步骤:

1.点击任何 HTTP/API 调用。

2.立即点击主页按钮。

过一段时间就会来

2018-12-14 13:43:46.968901+0530 NewReader[15364:4847228] Task <519A3F27-90DA-439F-8711-B07EFA62E823>.<1> load failed with error Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <519A3F27-90DA-439F-8711-B07EFA62E823>.<1>, _kCFStreamErrorDomainKey=1, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <519A3F27-90DA-439F-8711-B07EFA62E823>.<1>"
), _kCFStreamErrorCodeKey=53} [53]

我不知道其他应用程序如何解决这个问题。 还提出了问题here

让我知道修复或解决方法。

P.S.:我已经尝试过DispatchDelay,但它不起作用。

最佳答案

您需要为 URLSession 配置后台功能。情况一直如此,但之前进入后台时它会继续工作很短的时间(通常最多 3 分钟)。最近的更新可能变得更加严格,或者您的请求需要的时间比可用时间更长。

首先,您需要在功能选项卡中启用后台模式。

这里是一些示例代码,展示如何设置 URLSession 为后台做好准备

private lazy var bgSession: URLSession = {
    let config = URLSessionConfiguration.background(withIdentifier: Constant.sessionID.rawValue)
    //config.isDiscretionary = true
    config.sessionSendsLaunchEvents = true
    return URLSession(configuration: config, delegate: self, delegateQueue: nil)
}()

代码示例和更多信息可从以下article获得

关于当 HTTP 请求命中并且应用程序突然进入后台时,iOS 12 URLSession 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775848/

相关文章:

IOS:选择时将 UITableView 中的选定项目显示到 UItextField

objective-c - NSArray 中的 NSDictionary 出现故障

ios - 在 iOS 上测试应用内购买的想法;显示的货币

iOS - 在前台接收 FCM 推送消息

ios - 在 iOS swift 5 中获取 LAN 上的设备列表及其主机名和 IP 地址

swift - Alamofire 中需要与 HttpURLConnection Android 中类似的选项来 setRequestProperty

swift - Swift、自动布局和堆栈 View 的问题

ios - 来自太多请求的 NSURLSession 和地理编码器错误,解决方案是什么?

core-data - 从 RestKit 过渡到纯 AFNetworking 2.0

swift - 从 Swift NSURLsession 的 Rest API 调用返回数据