如何从网络扩展中停用按需连接 ***?
Posted
技术标签:
【中文标题】如何从网络扩展中停用按需连接 ***?【英文标题】:How to deactivate on demand connect *** from network extension? 【发布时间】:2020-03-29 03:19:41 【问题描述】:我已经使用NEOnDemandRuleConnect
配置了一个始终在线的 ***,如果用户已支付订阅费用,我会从后端检索一些用户数据,例如到期日期。如果它过期,我想在不打开主应用程序的情况下停用 ***,从网络扩展中进行。我使用每日计时器从后端检索数据,然后检查订阅是否已过期。然后我有一个功能,可以从系统设置应用程序加载 *** 管理器,然后停用它,最后保存它。如果我不停用管理器,设备将无法连接,因为它是一个已配置为始终与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.***BundleId )
guard let index = index else
completion(.error(ProtectionServiceError.noKids***Installed))
return
let myManager = managers[index]
myManager.loadFromPreferences(completionHandler: (error) in
guard error == nil else
completion(.error(ProtectionServiceError.errorStoppingTunnel))
return
// Deactivate the *** 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))
所有这些代码和逻辑都在扩展程序中执行,并具有它假设的所有限制。使用前面的函数我只会得到第一个 NSLog
说 Called stopProtection
但它不会加载任何管理器。从主要目标调用它会起作用。我不知道我是否可以从扩展程序中加载和修改管理器,或者这是另一种方式。
【问题讨论】:
【参考方案1】:好的,我已经通过附加到进程并查看设备控制台来调试网络扩展,并弹出此错误,
NETunnelProviderManager objects cannot be instantiated from NEProvider processes
所以不,这就是答案!
【讨论】:
以上是关于如何从网络扩展中停用按需连接 ***?的主要内容,如果未能解决你的问题,请参考以下文章