首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接VPN服务器时“Domain=NEVPNErrorDomain Code=1 \”(Null)\“错误

连接VPN服务器时“Domain=NEVPNErrorDomain Code=1 \”(Null)\“错误
EN

Stack Overflow用户
提问于 2017-11-29 10:36:32
回答 2查看 5.7K关注 0票数 2

在连接到虚拟专用网服务器时,我只得到了"Error Domain=NEVPNErrorDomain Code=1 \“(Null)\”,之后它就完美地工作了。

我检查了类似于我的问题的尝试启动NEVPNErrorDomain网络扩展时出现TunnelProvider错误1,并遵循了它在这个解决方案中所说的方式,但是仍然会出现相同的错误。

下面是我使用网络扩展连接到VPN服务器的代码。

代码语言:javascript
复制
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")
                    }
                }
            })
        }
    }
}

谁能帮我一下为什么第一次进去如果?

代码语言:javascript
复制
if((startError) != nil) { 
 // Here is control coming for first time
}
else {
// Which should always come here //later onwards its coming here, not first time.
}

注意:我找到了相关的post 在GitHub上,但是如果我尝试这个解决方案,它会发出可选的(Error Domain=NEVPNErrorDomain Code=4 "(null)")问题,因为配置已经过时,需要加载。您应该调用loadFromPreferencesWithCompletionHandler:,在完成处理程序中修改要修改的值,然后调用saveToPreferencesWithCompletionHandler:。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-11-30 09:29:56

解决办法是:

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

代码语言:javascript
复制
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")
                }
            }
        })
    }
})
票数 5
EN

Stack Overflow用户

发布于 2018-04-12 07:12:48

对我来说,解决办法是:

代码语言:javascript
复制
  [self save:settings callback:^(NSError *saveError) {
    if (saveError) {
        completionHandler(saveError);
        HMLog(@"Save config failed [%@]", saveError.localizedDescription);
        return;
    }
    [self.vpnManager loadFromPreferencesWithCompletionHandler:^(NSError *e) {  // hack for fix error "NEVPNErrorDomain Code=1"
        [self.vpnManager loadFromPreferencesWithCompletionHandler:^(NSError *loadError) {
            if (loadError) {
                completionHandler(loadError);
                return;
            }
            NSError *a1;
            [self.vpnManager.connection startVPNTunnelAndReturnError:&a1];
            if (a1) {
                completionHandler(a1);
            } else
                completionHandler(nil);
        }];
    }];
}];

在储蓄之后,只打两次电话给loadFromPreferences。这个修复在ios: 9,10,11上有效。我不知道为什么,但它的工作.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47550706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档