gpt4 book ai didi

ios - 如何从网络扩展中停用按需连接 VPN?

转载 作者:行者123 更新时间:2023-11-29 05:16:05 26 4
gpt4 key购买 nike

我已使用 NEOnDemandRuleConnect 配置了始终在线的 VPN我从后端检索一些用户数据,例如用户已支付订阅费用的到期日期。如果它过期,我想在不打开主应用程序的情况下停用 VPN,从网络扩展中执行此操作。我使用每日计时器从后端检索数据,然后检查订阅是否已过期。然后我会有一个功能,从系统设置应用程序加载 VPN 管理器,然后停用它,最后保存它。如果我不停用管理器,设备将无法连接,因为它是一个 VPN,已配置为始终与 NEOnDemandRule 连接。功能大概就是这个

func stopProtection(completion: @escaping (Result<Void>) -> Void) {

NSLog("Called stopProtection")

NETunnelProviderManager.loadAllFromPreferences { (managers, error) in

if let error = error {
NSLog("[SUBS] ERROR \(error)")
}

if let managers = managers {
if managers.count > 0 {
let index = managers.firstIndex(where: { $0.localizedDescription == Constants.vpnBundleId })

guard let index = index else {
completion(.error(ProtectionServiceError.noKidsVpnInstalled))
return
}

let myManager = managers[index]

myManager.loadFromPreferences(completionHandler: { (error) in
guard error == nil else {
completion(.error(ProtectionServiceError.errorStoppingTunnel))
return
}

// Deactivate the VPN and save it
myManager.isEnabled = false

myManager.saveToPreferences(completionHandler: { (error) in
guard error == nil else {
completion(.error(ProtectionServiceError.errorStoppingTunnel))
return
}

completion(.success(()))
})
})
} else {
completion(.error(ProtectionServiceError.errorStoppingTunnel))
}
}
}
}

所有这些代码和逻辑都在扩展中执行,并具有其假定的所有限制。使用前面的函数,我只会得到第一个 NSLogCalled stopProtection 但它不会加载任何管理器。从主要目标调用它是可行的。我不知道是否可以从扩展加载和修改管理器,或者这是另一种方法。

最佳答案

好的,我已经通过附加到进程并查看设备控制台来调试网络扩展,并弹出此错误,

NETunnelProviderManager objects cannot be instantiated from NEProvider processes

所以不,这就是答案!

关于ios - 如何从网络扩展中停用按需连接 VPN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com