您可以通过在 iOS 13(以及同年的 Apple 操作系统)及更高版本上设置您allowsConstrainedNetworkAccess
的s来获得一些控制。allowsExpensiveNetworkAccess
URLRequest
allowsConstrainedNetworkAccess
:
在 iOS 13 及更高版本中,用户可以将其设备设置为使用低数据模式作为“设置”应用程序中的蜂窝数据选项之一。用户可以打开低数据模式以减少应用的网络数据使用量。当用户打开低数据模式时,此属性控制请求的行为。如果没有可用的非约束网络接口并且请求的allowConstrainedNetworkAccess 属性为false,则从请求创建的任何连接都会失败。在这种情况下,连接失败时提供的错误具有 networkUnavailableReason 属性,其值为 NSURLErrorNetworkUnavailableReason.constrained。
在请求上设置此属性会覆盖 URLSessionConfiguration 的 allowConstrainedNetworkAccess 属性。例如,如果会话配置的allowConstrainedNetworkAccess 值为false,并且您从allowConstrainedNetworkAccess 为true 的请求创建任务,则该任务将该值视为true。
限制您的应用程序对用户启动的任务使用受限网络访问,并推迟自主任务,直到非受限接口可用。
allowsExpensiveNetworkAccess
:
系统根据网络接口的性质和其他因素确定什么构成“昂贵”。iOS 13 认为大多数蜂窝网络和个人热点都很昂贵。如果没有可用的非昂贵网络接口并且请求的 allowedExpensiveNetworkAccess 属性为 false,则从请求创建的任何任务都会失败。在这种情况下,任务失败时提供的错误具有 networkUnavailableReason 属性,其值为 NSURLErrorNetworkUnavailableReason.expensive。
在请求上设置此属性会覆盖 URLSessionConfiguration 的 allowedExpensiveNetworkAccess 属性。例如,如果会话配置的allowExpensiveNetworkAccess 值为false,并且您从allowExpensiveNetworkAccess 为true 的请求创建任务,则该任务将该值视为true。
限制你的应用程序使用昂贵的网络访问来完成用户启动的任务,并推迟自由裁量的任务,直到一个非昂贵的界面可用。