【问题标题】:Getting VPN Connection Status on Xamarin.ios在 Xamarin.ios 上获取 VPN 连接状态
【发布时间】:2019-02-28 18:40:15
【问题描述】:

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

我正在尝试研究如何在 Xamarin.iOS 中执行以下操作: 1 - 检查 VPN 连接是否在 iOS 设备上激活/启用 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 } 任何 cmets/suggestions/youtube 视频/博客条目链接将不胜感激。

编辑: For 1 - 意识到我不需要检查 VPN 状态,只需 ping 内部服务器/主机以查看它是否响应。

【问题讨论】:

    标签: ios xamarin xamarin.ios vpn


    【解决方案1】:

    仅 iOS 允许您从应用程序中打开自己的应用程序设置页面。如果您的应用没有实现自己的设置页面,则会打开主设置页面,但您无法打开特定的系统设置页面。请参阅 SO 其他地方的讨论:How to open Settings programmatically like in Facebook app?

    【讨论】:

      【解决方案2】:

      您的方法是要走的路,这样使用什么接口类型都没有关系。请注意,还有其他接口名称,例如“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()));
      }
      

      【讨论】:

        猜你喜欢
        • 2011-03-28
        • 2016-07-12
        • 1970-01-01
        • 2012-06-06
        • 2019-06-26
        • 2017-08-30
        • 2014-09-29
        • 2021-11-02
        • 1970-01-01
        相关资源
        最近更新 更多