重启应用程序后是否连接了NEVPNManager检查?

Wil*_*ing 6 ios nevpnmanager networkextension

我使用框架编写VPN工具NetworkExtension.我可以连接IPSec的通过NEVPNManager.sharedManager,什么时候都能抢通知VPN连接状态改变.但是当我杀死应用程序并重新打开它时,NEVPNManager.Connect.Status总是零,比手段无法显示正确的连接状态.怎么解决?

Muk*_*esh 10

威廉斯特林评论确实有意义,它对我有用,

在为NEVPNStatusDidChange像下面的VPN管理器对象添加观察者加载首选项之前,

override func viewDidLoad() {

        super.viewDidLoad()

        self.vpnManager.loadFromPreferences { (error) in
            if error != nil {
                print(error.debugDescription)
            }
            else{
                print("No error from loading VPN viewDidLoad")
            }
        }

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.VPNStatusDidChange(_:)), name: NSNotification.Name.NEVPNStatusDidChange, object: nil)

     }
Run Code Online (Sandbox Code Playgroud)


hun*_*eti 5

尝试这个:

func viewDidLoad() {
    // Register to be notified of changes in the status. These notifications only work when app is in foreground.
    notificationObserver = NSNotificationCenter.defaultCenter().addObserverForName(NEVPNStatusDidChangeNotification, object: nil , queue: nil) {
       notification in

       print("received NEVPNStatusDidChangeNotification")

       let nevpnconn = notification.object as! NEVPNConnection
       let status = nevpnconn.status
       self.checkNEStatus(status)
    }
}



func checkNEStatus( status:NEVPNStatus ) {
    switch status {
    case NEVPNStatus.Invalid:
      print("NEVPNConnection: Invalid")
    case NEVPNStatus.Disconnected:
      print("NEVPNConnection: Disconnected")
    case NEVPNStatus.Connecting:
      print("NEVPNConnection: Connecting")
    case NEVPNStatus.Connected:
      print("NEVPNConnection: Connected")
    case NEVPNStatus.Reasserting:
      print("NEVPNConnection: Reasserting")
    case NEVPNStatus.Disconnecting:
      print("NEVPNConnection: Disconnecting")
  }
}
Run Code Online (Sandbox Code Playgroud)

在已连接 VPN 的情况下运行应用程序时,上述代码应生成以下消息:

checkNEStatus:  NEVPNConnection: Invalid  
viewDidLoad:    received NEVPNStatusDidChangeNotification  
checkNEStatus:  NEVPNConnection: Connected
Run Code Online (Sandbox Code Playgroud)

  • 知道了 !必须在通知之前加载 vpn 配置,然后 NEVPNStatusDidChangeNotification 工作!多谢。 (3认同)