首页 > 解决方案 > 在 Xamarin.iOS、iOS 13 中获取连接的 wifi 网络的 SSID

问题描述

从 iOS 12 到 13 后,我无法再获取连接的 wifi 网络的 SSID。

我尝试了这个问题中提出的 iOS 13 解决方案, 但没有结果。

我之前成功的 iOS 12 代码(此外,现在不推荐使用“CaptiveNetwork”):

if (CaptiveNetwork.TryGetSupportedInterfaces(out string[] supportedInterfaces) == StatusCode.OK)
{
    foreach (var item in supportedInterfaces)
    {
        if (CaptiveNetwork.TryCopyCurrentNetworkInfo(item, out NSDictionary info) == StatusCode.OK)
        {
            var ssid = info[CaptiveNetwork.NetworkInfoKeySSID].ToString();
            return ssid;
        }
    }
}

有什么建议吗?

标签: xamarinxamarin.iosios13

解决方案


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() 函数。


推荐阅读