“错误域= NEVPNErrorDomain代码= 1”(空)\“”当连接VPN服务器

我只在连接到VPN服务器时第一次得到“错误域= NEVPNErrorDomain代码= 1”(空)\“”,以后才能完美工作。

我已经检查NEVPNErrorDomain错误1当试图启动类似于我的问题的TunnelProvidernetworking扩展 ,并按照其在这个解决scheme中说的方式,但仍然得到相同的错误。

所以这里是我使用networking扩展连接到VPN服务器的代码。

func initVPNTunnelProviderManager(){ self.vpnManager.loadFromPreferences { (error) -> Void in if((error) != nil) { print("VPN Preferences error: 1") } else { let p = NEVPNProtocolIKEv2() p.username = "******" p.remoteIdentifier = "*****" p.serverAddress = "******" let keychain = KeychainSwift() let data = keychain.getData("vpnPassword") p.passwordReference = data p.authenticationMethod = NEVPNIKEAuthenticationMethod.none p.useExtendedAuthentication = true p.disconnectOnSleep = false self.vpnManager.protocolConfiguration = p self.vpnManager.isEnabled = true self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in if((error) != nil) { print("VPN Preferences error: 2") } else { var startError: NSError? do { try self.vpnManager.connection.startVPNTunnel() } catch let error as NSError { startError = error print(startError) } catch { print("Fatal Error") fatalError() } if((startError) != nil) { **// Here it comes first time later onwards it goes to else block. (Which I'm expecting first time too) print("VPN Preferences error: 3")** let alertController = UIAlertController(title: "Oops..", message: "Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert) alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil)) self.present(alertController, animated: true, completion: nil) print(startError) } else { print("Start VPN") } } }) } } } 

有人可以帮助我为什么第一次进入里面吗?

 if((startError) != nil) { // Here is control coming for first time } else { // Which should always come here //later onwards its coming here, not first time. } 

注意:我在GitHub上find了相关的post,但是如果我尝试这个解决scheme,那么给它提供可选的(Error Domain = NEVPNErrorDomain Code = 4“(null)”)问题,因为configuration是陈旧的,需要加载。 您应该调用loadFromPreferencesWithCompletionHandler:并在完成处理程序中修改要修改的值,然后调用saveToPreferencesWithCompletionHandler :.

提前致谢。

解决scheme是:

saveToPreferences之后再次调用loadFromPreferences并在加载完成后启动连接将解决问题。 这听起来很愚蠢。

 self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in if((error) != nil) { print("VPN Preferences error: 2") } else { self.vpnManager.loadFromPreferences(completionHandler: { (error) in if((error) != nil) { print("VPN Preferences error: 2") } else { var startError: NSError? do { try self.vpnManager.connection.startVPNTunnel() } catch let error as NSError { startError = error print(startError) } catch { print("Fatal Error") fatalError() } if((startError) != nil) { print("VPN Preferences error: 3") let alertController = UIAlertController(title: "Oops..", message: "Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert) alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil)) self.present(alertController, animated: true, completion: nil) print(startError) } else { self.VPNStatusDidChange(nil) print("Start VPN") } } }) } }) 
Interesting Posts