[英]How to support low data mode in iOS 13?
iOS 13 中引入了“低数据模式”。请参阅Apple 的 iOS 13 概述的“设置”部分:
我找不到任何关于此的开发人员文档。
这是第三方应用程序开发人员可以选择的,如 MacRumors 所建议的那样吗? 还是会像 AppleInsider 建议的那样,在未连接到 Wi-Fi 时暂停后台活动?
要确定 iOS 当前是否处于低数据模式,您可以使用网络库:
import Network // Put this on top of your class
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
if path.isConstrained {
// Path uses an interface in Low Data Mode.
}
else if path.isExpensive {
// Path uses an interface that is considered expensive, such as Cellular or a Personal Hotspot.
}
}
monitor.start(queue: DispatchQueue.global(qos: .background))
URLSession 在 iOS 13 中支持LowData模式。
脚步
statusCode == 200
(设置中禁用低数据模式)。error.networkAvailableReason == .constrained
(低数据模式在设置中启用)从 16:00 开始查看 WWDC 2019 中的网络进展,第 1 部分以获取演示和示例代码。 您可以使用Combine 使代码更简单,但这不是必需的。
首先,您需要配置您的URLSession
( NSURLSession
) 以允许或禁止打开expensive
或constrained
网络连接。
您可以通过将 URLSession 的相应属性allowsExpensiveNetworkAccess
或allowsConstrainedNetworkAccess
为false
( NO
) 来实现。
如果URLSessionTask
导致的错误是NSURLErrorNotConnectedToInternet
错误,其中包含userInfo
中的NSURLErrorNetworkUnavailableReasonKey
条目(Objective-C)或具有非 nil NetworkUnavailableReason
属性集(Swift)的URLError
,那么您需要采取相应的行动。
这些原因可能是:
expensive
constrained
cellular
自 iOS 7 以来, cellular
原因就已经存在,所以它并不新鲜,但枚举的全部reason
是,因为 Apple 今年简化了连接类型处理。
这是 Xamarin 中的解决方案,对于那些感兴趣的人:
NWPathMonitor monitor = new NWPathMonitor();
monitor.SetUpdatedSnapshotHandler(path =>
{
if (path.Status == NWPathStatus.Satisfied)
{
if(path.IsConstrained)
{
// Path uses an interface in Low Data Mode.
}
}
});
monitor.SetQueue(CoreFoundation.DispatchQueue.DefaultGlobalQueue);
monitor.Start();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.