Принудительное использование мобильных данных для некоторых вызовов API и других через Wi-Fi или доступную сеть

Я работаю над приложением, в котором необходимо выполнять определенный API только через мобильные данные, а не через Wi-Fi, что позволяет выполнять другие вызовы API с использованием доступного типа сети, будь то сотовые данные или Wi-Fi или ....

Есть ли способ принудительно использовать использование мобильных данных, даже если WIFI включен для этого вызова API.

После открытия тикета с разработчиком Apple, они ответили:

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

Но я все еще застрял и не знаю, что делать дальше.

1 ответ

Здесь вы можете немного контролировать, установив или на вашем URLRequests на iOS 13 (и ОС Apple того же года) и выше.

allowsConstrainedNetworkAccess:

В iOS 13 и более поздних версиях пользователи могут настроить свое устройство на использование режима низкого объема данных в качестве одного из параметров сотовых данных в приложении «Настройки». Пользователи могут включить режим низкого объема данных, чтобы уменьшить использование сетевых данных вашим приложением. Это свойство управляет поведением запроса, когда пользователь включает режим низкого объема данных. Если нет доступных неограниченных сетевых интерфейсов и свойство запроса allowConstrainedNetworkAccess имеет значение false, любое соединение, созданное на основе запроса, завершается ошибкой. В этом случае ошибка, возникающая при сбое подключения, имеет свойство networkUnavailableReason, значение которого равно NSURLErrorNetworkUnavailableReason.constrained.

Установка этого свойства в запросе переопределяет свойство allowConstrainedNetworkAccess для URLSessionConfiguration. Например, если в конфигурации сеанса значение allowConstrainedNetworkAccess имеет значение false, и вы создаете задачу из запроса, для которого allowConstrainedNetworkAccess имеет значение true, задача обрабатывает значение как истинное.

Ограничьте использование приложением ограниченного доступа к сети для задач, инициируемых пользователем, и отложите дискреционные задачи до тех пор, пока не станет доступен неограниченный интерфейс.

allowsExpensiveNetworkAccess:

Система определяет, что считать «дорогим», исходя из характера сетевого интерфейса и других факторов. iOS 13 считает, что большинство сотовых сетей и персональных точек доступа являются дорогими. Если доступные недорогие сетевые интерфейсы отсутствуют и свойство запроса allowExicingNetworkAccess имеет значение false, любая задача, созданная на основе запроса, не выполняется. В этом случае ошибка, возникающая при сбое задачи, имеет свойство networkUnavailableReason, значение которого равно NSURLErrorNetworkUnavailableReason.exicing.

Установка этого свойства в запросе переопределяет свойство allowExuredNetworkAccess для URLSessionConfiguration. Например, если в конфигурации сеанса значение allowExhibitedNetworkAccess имеет значение false, и вы создаете задачу из запроса, для которого allowExhibitedNetworkAccess имеет значение true, задача обрабатывает значение как true.

Ограничьте использование дорогостоящего сетевого доступа в вашем приложении задачами, инициируемыми пользователем, и отложите дискреционные задачи до тех пор, пока не станет доступен недорогой интерфейс.

Другие вопросы по тегам