1

我可以将连接的 wifi 的 ssid 连接到我的 iPhone。在安装 Xcode 10 并更新 Visual Studio for Mac 和 Visual Studio 2017 后,它返回给我一个空的 ssid。

这是我获取 ssid 的一段代码:

        public override string GetCurrentWiFi()
    {
        String ssid = "";
        try
        {
            string[] supportedInterfaces;
            StatusCode status;
            if ((status = CaptiveNetwork.TryGetSupportedInterfaces(out supportedInterfaces)) != StatusCode.OK)
            {

            }
            else
            {
                foreach (var item in supportedInterfaces)
                {
                    NSDictionary info;
                    status = CaptiveNetwork.TryCopyCurrentNetworkInfo(item, out info);
                    if (status != StatusCode.OK)
                    {
                        continue;
                    }
                    ssid = info[CaptiveNetwork.NetworkInfoKeySSID].ToString();
                }
            }
        }
        catch
        {

        }
        return ssid;
    }

我尝试为 iOS 12 应用程序添加“访问 WiFi 信息”权利,如此处所述,但该应用程序仍然得到一个空的 ssid:https ://forums.xamarin.com/discussion/139476/adding-access-wifi-information- ios-12-apps 的权利

如果有人能提供帮助,我将不胜感激。

已解决: 我为我的 Apple ID 应用了访问 WIFI 信息。然后我再次重新生成了我的 Provisioning 配置文件并在我的 Xcode 中打开它。不要忘记在 ios Bundle Signing 的 Custom Entertainments 中添加 Entitlements.plist。现在它可以正常工作了。

针对 iOS 13 更新: Apple 宣布在 iOS 13 中,CNCopyCurrentNetworkInfo API 将不再返回有效的 Wi-Fi SSID 和 BSSID 信息。

如果您的应用程序需要有效的 Wi-Fi SSID 和 BSSID 信息才能运行,您可以执行以下操作: · 对于附件设置应用程序,使用 NEHotSpotConfiguration API,它现在可以选择传递您的应用程序期望连接的 SSID 热点的前缀到。· 对于其他类型的应用,使用 CoreLocation API 请求用户同意访问位置信息。

因此,我通过以下方式更新了上述解决方案:

  • 将此密钥添加到您的 info.plist:

     <key>NSLocationWhenInUseUsageDescription</key>
     <string>Your Description</string>
    
  • 使用 CoreLocation API 请求用户同意访问位置信息。

    private void GetLocationConsent()
    {
        var manager = new CLLocationManager();
        manager.AuthorizationChanged += (sender, args) => {
            Console.WriteLine("Authorization changed to: {0}", args.Status);
        };
        if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            manager.RequestWhenInUseAuthorization();
    
    }
    
  • 在调用“CaptiveNetwork”之前调用 GetLocationConsent() 函数。

4

1 回答 1

5

要在 iOS 12 及更高版本中使用此功能,请为您的应用启用访问 WiFi 信息功能。在此处输入图像描述

所以你必须在appid中检查Access WiFi Infomation。

在此处输入图像描述

于 2018-09-28T08:48:13.797 回答