NEVPNManager - Подключение по требованию блокирует доступ в интернет
Я создаю профиль VPN через свое приложение, и у меня есть следующие правила и настройки:
let newIPSec = NEVPNProtocolIPSec()
newIPSec.serverAddress = AppConfiguration.getVPNEndPoint()
newIPSec.authenticationMethod = NEVPNIKEAuthenticationMethod.sharedSecret
newIPSec.username = VPNCredentialsModel.instance.vpnUserName()
newIPSec.passwordReference = VPNCredentialsModel.instance.vpnPasswordReference() as Data?
newIPSec.sharedSecretReference = VPNCredentialsModel.instance.vpnPresharedKeyReference() as Data?
newIPSec.useExtendedAuthentication = true
newIPSec.disconnectOnSleep = false
self.manager.protocolConfiguration = newIPSec
let connectRule = NEOnDemandRuleConnect()
connectRule.interfaceTypeMatch = .any
let ignoreRule = NEOnDemandRuleIgnore()
ignoreRule.interfaceTypeMatch = .any
ignoreRule.probeURL = URL(string:probeURL)
self.manager.onDemandRules = [ignoreRule,connectRule]
self.manager.isOnDemandEnabled = true
self.manager.isEnabled = true
Обновить
Мой probeURL - это вызов API отдыха, который обновляет бэкэнд и возвращает 200 или 500 в зависимости от статуса пользователя. Существует некоторая задержка, поскольку выполняются некоторые sql-запросы. ProbeURL ожидает 200 OK, иначе аннулирует правило игнорирования. Правило игнорирования становится недействительным, и он пытается подключиться к VPN, но пользователь больше не может подключиться, так как VPN заблокировал пользователя. Устройство iOS продолжает попытки в бесконечных циклах и блокирует доступ в Интернет из других приложений, выдвигая устройство в состояние кирпича. Есть ли лучший способ справиться с этим делом?
Предложение
Я могу обновить БД с помощью конечной точки файла, которая указывает статус пользователя как флаг - (у каждого пользователя есть конечная точка файла). Если файл доступен, он возвращает 200 OK, а если его удалить, возвращает 404. Таким образом, URL-адрес зонда может получить 200 OK без задержки, когда это необходимо. Однако это может быть дополнительный уровень реализации и управления файлами. Что вы думаете об этом? Может кто-нибудь порекомендовать лучший способ справиться с этим контрольным примером?
тестирование
Я тестировал успешный сценарий с помощью следующего URL-адреса зонда:
httpstat.us/200, чтобы ignoreRule был действительным и не подключался
httpstat.us/500 для ignoreRUle, чтобы быть недействительным и продолжить подключение к VPN