NSURLSession 后台上传 - 需要启用后台模式?

Posted

技术标签:

【中文标题】NSURLSession 后台上传 - 需要启用后台模式?【英文标题】:NSURLSession background upload - need to enable background modes? 【发布时间】:2015-03-16 20:25:03 【问题描述】:

我正在实例化一个NSURLSession 来做几个这样的后台上传:

  sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:myIdentifier];

在大多数情况下,一切似乎都正常,但我想知道如果我所做的只是后台上传而不是下载,是否需要在 p.list 中添加后台 Fetch 键?我找不到说明我应该或不应该的文件。特别是在 XCode 5 + 上,我想知道是否在 Capabilities>Background 模式下,我应该启用还是不启用后台获取,如果我所做的只是后台上传,请注意我确实在上传完成后阅读了响应,这可能被视为“下载”。

【问题讨论】:

【参考方案1】:

官方指南Background Execution声明三种后台执行方式:

    执行有限长度任务 - 使用UIApplication 方法beginBackgroundTaskWithName:expirationHandler: 执行有限 时间任务。 在后台下载内容 - 使用 NSURLSession 来 下载内容。您的应用程序提供的NSURLSession 运行在 单独的系统级守护进程,完成后,通过 完成处理程序。 (你上面提到的实现) 实现长时间运行的任务 - 需要运行的任务 很长时间,都在这个类别下处理,如音频,voip, 位置,下载过程,更新内容。这些类型的任务 需要 info.plist 中提到的特殊 UIBackgroundModes 键。

所以回答你的问题,你不需要UIBackgroundModes 键,直到你不属于长期运行的任务类别。

【讨论】:

以上是关于NSURLSession 后台上传 - 需要启用后台模式?的主要内容,如果未能解决你的问题,请参考以下文章

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

NSURLSession:后台崩溃,因为没有调用上传委托

在 iOS8 中使用 NSUrlSession 使用流请求进行后台上传

NSURLSession 导致 0B 图像上传到 GCS

后台上传大量数据

iOS:如何增加 NSURLSession 上传任务的块大小?