0

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

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

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

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

但是我仍然卡住了,不知道如何进行。

4

1 回答 1

1

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

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。

限制你的应用程序使用昂贵的网络访问来完成用户启动的任务,并推迟自由裁量的任务,直到一个非昂贵的界面可用。

于 2021-05-27T15:23:58.033 回答