繁体   English   中英

如何在 iOS 13 中支持低数据模式?

[英]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 ) 以允许或禁止打开expensiveconstrained网络连接。

您可以通过将 URLSession 的相应属性allowsExpensiveNetworkAccessallowsConstrainedNetworkAccessfalse ( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM