在Xamarin.ios上获取VPN连接状态

时间:2019-02-28 18:40:15

标签: ios xamarin xamarin.ios vpn

我们正在将移动应用程序从iOS本机(Swift)转换为Xamarin.iOS(以便最终可以部署到多个操作系统)。

我正在尝试研究如何在Xamarin.iOS中执行以下操作: 1-检查iOS设备上的VPN连接是否处于活动状态/已启用 2-弹出“ VPN设置”屏幕(或更妙的是,自动启用特定的VPN)

针对: 1-此https://docs.microsoft.com/en-us/dotnet/api/networkextension.nevpnstatus是否适用? 2-https://docs.microsoft.com/en-us/dotnet/api/networkextension.netunnelprovidermanager是否相同?

现有Swift代码的片段:

func connectToVpn(){ //mention the connection name instead of exposing the server //let connectUrl = URL(string: "mobileconnect://connect?name=*********") let connectUrl = URL(string: "mobileconnect://connect?") if UIApplication.shared.canOpenURL(connectUrl!) == true { UIApplication.shared.openURL(connectUrl!) } } var isVpnConnected : Bool { let dict = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as? [String: AnyObject] guard let keys = dict?["__SCOPED__"]?.allKeys as? [String] else{ return false } for key in keys { if key.contains("tap") || key.contains("tun") || key.contains("ppp") { return true } } return false } 任何评论/建议/ youtube视频/博客条目链接将不胜感激。

编辑: 对于1-已实现,我不需要检查VPN状态,只需ping内部服务器/主机以查看其是否响应。

2 个答案:

答案 0 :(得分:0)

仅iOS允许您从应用程序内打开自己的应用程序设置页面。如果您的应用未实现自己的设置页面,则将打开主设置页面,但无法打开特定的系统设置页面。在SO上的其他地方查看此讨论:How to open Settings programmatically like in Facebook app?

答案 1 :(得分:0)

您的方法是必经之路,无论使用哪种接口类型都无关紧要。请注意,还有其他接口名称,例如“ utun2”。不确定从何处提取所有接口名称,但是这里是Xamarin的更新版本,以防有人入侵。

public bool isVPNConnected()
{
    var settings = CoreFoundation.CFNetwork.GetSystemProxySettings();
    var keys = settings.Dictionary.ValueForKey(new NSString("__SCOPED__")) as NSDictionary;

    return keys.Any(k => new string[] { "tap", "tun", "utun2", "ppp", "ipsec", "ipsec0" }.Contains(k.Key.ToString()));
}