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

0 ответов

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