WWDC Quick Look 💓 By SwiftGGTeam
Optimize for 5G networks

Optimize for 5G networks

观看原视频

Highlight

iOS 15 通过”自动切换 5G”和”智能数据模式”在系统层自动管理网络接口选择,开发者应停止根据网络类型做判断,改用 allowsExpensiveNetworkAccessallowsConstrainedNetworkAccess 让应用自适应不同网络环境。

核心内容

从 2G 到 5G,每一代移动网络都带来了新的应用可能性。2G 让短信和彩信成为可能,3G 把互联网装进口袋,4G 让高清视频通话和实时多人游戏成为日常。5G 的理论速度可达 4Gbps,延迟低至 7 毫秒,还支持更多设备同时连接。

但 5G 也带来了新的挑战。5G 网络比 LTE 更耗电,覆盖不均匀,而且用户可能使用的是按流量计费的套餐。开发者如果简单地把 5G 当成”更快的 Wi-Fi”来用,可能会让用户面临电量快速下降或流量超额的风险。

Apple 在 iOS 15 中内置了两项系统级技术来解决这个问题:

自动切换 5G(Automatic Switch to 5G):系统持续评估 Wi-Fi、LTE 和 5G 的相对性能,自动为当前任务选择最佳网络接口。下载大文件时切到 5G,后台低数据任务用 LTE,公共 Wi-Fi 不安全时优先蜂窝网络。

智能数据模式(Smart Data Mode):检测网络拥塞并自动迁移到阻力最小的接口。在体育场、会议中心等拥挤场所,系统会把连接从拥塞的 Wi-Fi 迁移到 5G,保证应用的网络服务不中断。

这意味着开发者不需要、也不应该再写代码判断”当前是 Wi-Fi 还是 5G”。系统已经做了这个决策,开发者只需要关注网络是否”昂贵”或”受限”。

详细内容

停止根据网络类型做判断

09:18)过去常见的做法:

// 不要这样做
if currentNetworkType == .wifi {
    // 下载高清视频
} else if currentNetworkType == .cellular {
    // 只下载缩略图
}

这种做法在 5G 时代会阻碍应用获得最佳体验。5G 的速度可能是公共 Wi-Fi 的 10 倍,而且系统支持多路径网络。如果用户同时连接了 Wi-Fi 和 5G,系统可能选择 5G 作为数据传输通道。

正确的做法是通过 URLSession 或 Network 框架的属性来判断网络特性:

let config = URLSessionConfiguration.default
config.allowsExpensiveNetworkAccess = true
config.allowsConstrainedNetworkAccess = false
let session = URLSession(configuration: config)

关键点:

  • allowsExpensiveNetworkAccess:控制是否允许在昂贵网络(如按流量计费的蜂窝)上执行请求
  • allowsConstrainedNetworkAccess:控制是否允许在受限网络(如低数据模式)上执行请求
  • 这两个属性替代了传统的网络类型检查
  • 系统会根据用户的蜂窝套餐和数据模式设置自动推导”昂贵”和”受限”状态

使用高级框架充分利用 5G

09:46)Apple 的高级网络框架已经针对 5G 做了优化:

// AVFoundation 自动适配 5G 高带宽
let playerItem = AVPlayerItem(url: highQualityVideoURL)
let player = AVPlayer(playerItem: playerItem)
// 系统会自动在 5G 下请求更高码率的视频流

// URLSession 在 5G 下自动使用更激进的缓存策略
let config = URLSessionConfiguration.default
config.allowsExpensiveNetworkAccess = true
let session = URLSession(configuration: config)

// 大文件下载任务
let downloadTask = session.downloadTask(with: largeFileURL)
downloadTask.resume()

关键点:

  • AVFoundation 在 5G 下会自动请求更高质量的视频流,类似 Apple TV 和 Apple Music 的行为
  • CallKit 针对 5G 下的 VoIP 做了延迟优化
  • URLSessionNetwork 框架已经过调优,可以自动利用 5G 的高带宽
  • Apple News 在 5G 下会缓存文章供离线阅读,iCloud 照片会在 5G 下同步,系统备份在 Wi-Fi 不可用时自动通过 5G 进行

适配受限和昂贵网络路径

10:39)用户在设置中可以选择三种数据模式:

数据模式网络特性适用场景
Allow More Data on 5G不昂贵,类似 Wi-Fi无限流量套餐
Standard昂贵普通流量套餐
Low Data Mode受限漫游或流量紧张

在 Network 框架中检查网络特性:

import Network

let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
    if path.isConstrained {
        // 低数据模式:暂停非必要下载,降低图片质量
        self.reduceDataUsage()
    } else if path.isExpensive {
        // 昂贵网络:询问用户是否继续大文件下载
        self.promptForExpensiveDownload()
    } else {
        // 不昂贵网络:正常使用,可以预加载内容
        self.enableAggressivePrefetching()
    }
}
monitor.start(queue: DispatchQueue.global())

关键点:

  • NWPathisExpensive 表示当前网络路径是否昂贵(通常指按流量计费的蜂窝)
  • NWPathisConstrained 表示是否处于低数据模式
  • 这两个属性是判断网络服务可用性的唯一依据
  • 如果应用实现了基于”昂贵”的策略,应提供设置项让用户覆盖

5G 网络类型简介

05:15)5G 部署主要有两种模式:

  • NSA(Non-Standalone):基于现有 LTE 核心网,同时使用 LTE 和 5G 链路调度流量,支持 sub-7GHz 和毫米波
  • SA(Standalone):完全基于新 5G 核心网,同样支持 sub-7GHz 和毫米波,延迟比 LTE 更低

Apple Park 的实测速度达到了 3Gbps,是 LTE 的 20 倍,ping 延迟仅 7 毫秒。但 5G 比 LTE 更耗电,系统会在性能和功耗之间自动平衡。

核心启发

  • 自适应媒体质量:在视频播放应用中,根据 isExpensiveisConstrained 动态调整视频码率。5G 不限量套餐用户自动播放 4K,标准模式播放 1080p,低数据模式降到 720p 或暂停自动播放。入口 API:NWPathMonitor + AVPlayerItem 的 preferredPeakBitRate。

  • 智能预加载:在新闻或社交应用中,当网络不昂贵时预加载下几页内容和高清图片;检测到昂贵或受限网络时停止预加载,只加载用户明确请求的内容。用 allowsExpensiveNetworkAccess 控制后台 URLSession 的行为。

  • 5G 低延迟多人游戏:利用 5G 的 7 毫秒级延迟开发实时对战游戏。配合 Network 框架的 NWConnection 建立 QUIC 连接,减少握手延迟。在体育场等拥挤场所,系统会自动切换到 5G 避免 Wi-Fi 拥塞。

  • 后台大文件传输策略:在云盘或文件同步应用中,大文件上传下载使用 URLSessionDownloadTask 的后台模式。配合 allowsExpensiveNetworkAccess 属性,让用户在设置中选择”允许蜂窝网络同步”。检测到 5G 且网络不昂贵时,自动开启全速同步。

关联 Session

评论

GitHub Issues · utterances