更改现有 NSURLSession 上的 allowedCellularAccess

Posted

技术标签:

【中文标题】更改现有 NSURLSession 上的 allowedCellularAccess【英文标题】:Changing allowsCellularAccess on existing NSURLSession 【发布时间】:2016-06-07 22:01:44 【问题描述】:

是否可以通过修改底层NSURLSessionConfiguration 来更改现有NSURLSessionallowsCellularAccess 的值?

如果用户的设备当前连接到 WiFi,我希望在不取消现有请求的情况下尊重用户对我的应用程序设置的任何更改。

【问题讨论】:

【参考方案1】:

没有。会话复制其配置。它不保留它。在你的情况下我会做的是:

复制会话的现有配置并更改该标志。 使用修改后的配置创建新会话。 如果用户使用 Wi-Fi,请在旧会话上调用 finishTasksAndInvalidate。这将使会话保持足够长的时间以完成任何现有请求,之后它将消失。 如果用户使用蜂窝网络,请调用 invalidateAndCancel,然后等待重新启动这些任务,直到用户使用 Wi-Fi。

此外,您可以在任务上调用cancelByProducingResumeData:,然后在具有不同配置的不同会话中重新创建(恢复)它。该任务仍将报告其对allowsCellularAccess 的原始配置,但将根据新会话的配置运行。 (陈旧的报告可能被视为错误。)

【讨论】:

那么如果用户使用allowCellularAccess = NO开始下载然后走到外面,意识到下载已经停止,并且想要通过蜂窝网络下载,他们将不得不重新开始下载?跨度> 如果应用程序使用下载任务并且应用程序和服务器都正确支持恢复下载,用户应该能够在设备重新连接到 Wi-网络。但是,我不知道有什么方法可以让您通过蜂窝网络恢复工作,除非allowsCellularAccessYES,因为无法将任务移至新会话,并且无法修改任务底层NSURLRequestallowsCellularAccess 属性。 我最近了解到,您实际上可以取消生成简历数据的任务,然后在另一个会话中重新创建它。出于某种原因,我认为这不起作用,但显然,我错了。所以这将是一种事后改变任务行为的方法。

以上是关于更改现有 NSURLSession 上的 allowedCellularAccess的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSURLSession downloadTaskWithResumeData: 时如何更改 URL?

NSURLSession 后台配置在 macOS 上的好处

NSURLSession - 请求超时

NSURLSession/NSURLConnection HTTP 加载失败和 iOS 9 的其他 AdMob 警告

使用 NSURLSession 缓慢下载照片

用 NSUrlSession 替换 NSUrlConnection