如何解决强制使用某些 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
上设置 allowsExpensiveNetworkAccess
或 URLRequest
来获得一些控制权。
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 举报,一经查实,本站将立刻删除。