You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS使用NSURLSession时WiFi下载正常 移动蜂窝网络无法下载文件

问题产生原因

故障由NSURLSessionConfiguration的网络权限配置直接导致:
代码中创建Session配置时显式设置了config.allowsCellularAccess = NO;,该属性为系统提供的网络类型管控开关,值为NO时会禁止当前NSURLSession实例在移动蜂窝网络下发起任何网络请求。

  • 设备接入WiFi时,网络链路不属于蜂窝网络,不受该配置拦截,因此文件下载功能正常
  • 切换到蜂窝网络后,所有通过该defaultSession发起的下载请求会被系统直接拦截,而应用内不依赖该Session的其他功能不受配置影响,因此表现为应用本身运行正常,但文件下载操作无法完成

额外注意:由于代码中对_defaultSession做了懒加载单例处理,Session一旦创建,后续修改config属性不会对已生成的Session实例生效,这也是修改配置后功能不生效的常见原因。

修复方案

根据业务需求选择对应处理方式即可:

方案1:默认允许蜂窝网络下载

如果业务无蜂窝网络下载限制,直接修改配置项为允许状态,修正后的代码如下:

- (NSURLSession *)defaultSession {
    if (_defaultSession == nil) {
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        // 开启蜂窝网络访问权限
        config.allowsCellularAccess = YES;
        _defaultSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    }
    return _defaultSession;
}

如果修改配置前已经在WiFi环境下生成过_defaultSession实例,需要先调用[_defaultSession invalidateAndCancel]后将_defaultSession置为nil,确保下次调用时会用新配置重建Session。

方案2:按需控制蜂窝下载权限

如果业务需要提供「仅WiFi环境下载文件」的用户设置项,可以保留该配置逻辑,但需要在以下场景触发时重建Session实例:

  • 用户切换蜂窝下载权限开关时
  • 监听到网络类型从WiFi切换为蜂窝/蜂窝切换为WiFi时
    重建时同步更新allowsCellularAccess的取值,即可实现权限管控逻辑。

内容的提问来源于stack exchange,提问作者STARK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:01:09