强制使用某些 API 调用和其他 API 的移动数据使用通过 wifi 或可用网络

如何解决强制使用某些 API 调用和其他 API 的移动数据使用通过 wifi 或可用网络

我正在开发一个应用程序,其中需要仅通过移动数据而不是 wifi 来执行特定的 API,从而允许使用可用的网络类型(蜂窝数据或 wifi 或 ....

有没有办法强制使用移动数据使用,即使 WIFI 在这个 API 调用中打开。

在与苹果开发商开票后,这是他们的回复

Yes. When using Network Framework,take a look at requiredInterfaceType on NWConnection. For higher level APIs like URLSession,this would be an Enhancement Request.

然而我仍然卡住了,不知道如何继续。

解决方法

您可以通过在 iOS 13(以及同年的 Apple 操作系统)及更高版本上的 allowsConstrainedNetworkAccess 上设置 allowsExpensiveNetworkAccessURLRequest 来获得一些控制权。

allowsConstrainedNetworkAccess

在 iOS 13 及更高版本中,用户可以将其设备设置为使用低数据模式作为“设置”应用中的蜂窝数据选项之一。用户可以打开低数据模式以减少应用的网络数据使用量。当用户打开低数据模式时,此属性控制请求的行为。如果没有可用的非受限网络接口并且请求的 allowedConstrainedNetworkAccess 属性为 false,则从请求创建的任何连接都会失败。在这种情况下,连接失败时提供的错误有一个 networkUnavailableReason 属性,其值为 NSURLErrorNetworkUnavailableReason.constrained。

在请求上设置此属性会覆盖 URLSessionConfiguration 的 allowedConstrainedNetworkAccess 属性。例如,如果会话配置的 allowedConstrainedNetworkAccess 值为 false,并且您从其 allowedConstrainedNetworkAccess 为 true 的请求创建任务,则该任务会将值视为 true。

将您的应用使用受限网络访问权限限制为用户启动的任务,并推迟自主任务,直到非受限界面可用。

allowsExpensiveNetworkAccess

系统根据网络接口的性质和其他因素确定什么构成“昂贵”。 iOS 13 认为大多数蜂窝网络和个人热点都很昂贵。如果没有可用的非昂贵网络接口,并且请求的 allowedExpensiveNetworkAccess 属性为 false,则从该请求创建的任何任务都会失败。在这种情况下,任务失败时提供的错误具有 networkUnavailableReason 属性,其值为 NSURLErrorNetworkUnavailableReason.expensive。

在请求上设置此属性会覆盖 URLSessionConfiguration 的 allowedExpensiveNetworkAccess 属性。例如,如果会话配置的 allowedExpensiveNetworkAccess 值为 false,并且您从其 allowedExpensiveNetworkAccess 为 true 的请求创建任务,则该任务会将值视为 true。

限制您的应用对用户启动的任务使用昂贵的网络访问权限,并推迟可自由支配的任务,直到有一个不昂贵的界面可用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?