Ios 如何获取服务器地址和remoteIdentifier?
我能够保存VPN配置。请告诉我如何使服务器地址变为变量或获取服务器地址,以及远程标识符是什么 我以这个例子作为参考: 我怎样才能解决这个问题Ios 如何获取服务器地址和remoteIdentifier?,ios,swift,vpn,networkextension,nevpnmanager,Ios,Swift,Vpn,Networkextension,Nevpnmanager,我能够保存VPN配置。请告诉我如何使服务器地址变为变量或获取服务器地址,以及远程标识符是什么 我以这个例子作为参考: 我怎样才能解决这个问题 func connectVPN(){ do { if let file = URL(string: "example.com") { let data = try Data(contentsOf: file) let json = try JSONS
func connectVPN(){
do {
if let file = URL(string: "example.com") {
let data = try Data(contentsOf: file)
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let object = json as? [String: String] {
// json is a dictionary
var data_VPN = object["VPN_data"]!
//print("Donebro:\(data_VPN)")
let certificate = data_VPN
let nsdata = certificate.data(using: .utf8)
let base64EncodedData = nsdata!.base64EncodedData()
print("base64StoreData:\(nsdata!)")
print("base64StoreNewData:\(base64EncodedData)")
var vpnManager = NEVPNManager.shared()
vpnManager.loadFromPreferences { error in
if vpnManager.`protocol` == nil{
let newIPSec = NEVPNProtocolIPSec()
newIPSec.serverAddress = ""
newIPSec.localIdentifier = ""
newIPSec.remoteIdentifier = ""
newIPSec.useExtendedAuthentication = true
newIPSec.identityData = base64EncodedData as! Data
newIPSec.authenticationMethod = NEVPNIKEAuthenticationMethod.certificate
print("VPNDATA:\(newIPSec)")
if #available(iOS 9, *) {
vpnManager.protocolConfiguration = newIPSec
} else {
vpnManager.`protocol` = newIPSec
}
vpnManager.isEnabled = true
vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
if ((error) != nil) {
print("VPN Preferences error: 2")
}
else {
vpnManager.loadFromPreferences(completionHandler: { (error) in
if ((error) != nil) {
print("VPN Preferences error: 2")
}
else {
var startError: NSError?
do {
try 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 {
//VPNStatusDidChange(nil)
print("Start VPN")
}
}
})
}
})
}
} else if let object = json as? [Any] {
// json is an array
for anItem in object as! [Dictionary<String, AnyObject>] {
let industryName = anItem["VPN_data"] as! String
}
} else {
print("JSON is invalid")
}
} else {
print("no file")
}
} catch {
print(error.localizedDescription)
}
}
}
func connectVPN(){
做{
如果let file=URL(字符串:“example.com”){
let data=try data(contentsOf:file)
让json=try JSONSerialization.jsonObject(使用:data,选项:[])
如果让object=json作为?[String:String]{
//json是一本字典
var data\u VPN=object[“VPN\u data”]!
//打印(“Donebro:\(数据虚拟专用网)”)
let certificate=data\u VPN
让nsdata=certificate.data(使用:.utf8)
让base64EncodedData=nsdata!.base64EncodedData()
打印(“base64StoreData:\(nsdata!)”)
打印(“base64StoreNewData:\(base64EncodedData)”)
var vpnManager=NEVPNManager.shared()
vpnManager.loadFromPreferences{中出现错误
如果vpnManager.`protocol`==nil{
设newIPSec=nevpnpprotocolipsec()
newIPSec.serverAddress=“”
newIPSec.localIdentifier=“”
newIPSec.remoteIdentifier=“”
newIPSec.useExtendedAuthentication=true
newIPSec.identityData=base64encodeddataas!数据
newIPSec.authenticationMethod=NEVPNIKEAuthenticationMethod.certificate
打印(“vpnda:\(newIPSec)”)
如果可用(iOS 9,*){
vpnManager.protocolConfiguration=newIPSec
}否则{
vpnManager.`protocol`=newIPSec
}
vpnManager.isEnabled=true
saveToPreferences(completionHandler:{(错误)->中的Void
如果((错误)!=nil){
打印(“VPN首选项错误:2”)
}
否则{
vpnManager.loadFromPreferences(completionHandler:{(错误)在中)
如果((错误)!=nil){
打印(“VPN首选项错误:2”)
}
否则{
var启动器错误:N错误?
做{
尝试vpnManager.connection.startVPNTunnel()
}
将let错误捕获为NSError{
起动器错误=错误
打印(起动器ROR)
}
抓住{
打印(“致命错误”)
法塔莱罗()
}
如果((启动器错误)!=nil){
打印(“VPN首选项错误:3”)
让alertController=UIAlertController(标题:“Oops..”,消息:“连接到VPN时出错。请重试。”,首选样式:UIAlertControllerStyle.alert)
addAction(UIAlertAction(标题:“驳回”,样式:UIAlertActionStyle.default,处理程序:nil))
self.present(alertController,动画:true,完成:nil)
打印(起动器ROR)
}
否则{
//VPNStatusDidChange(无)
打印(“启动VPN”)
}
}
})
}
})
}
}如果让object=json为?[任何]{
//json是一个数组
用于对象中的某个项目,如![字典]{
让industryName=anItem[“VPN_数据”]作为!字符串
}
}否则{