【问题标题】:Getting SSID of the connected wifi network in Xamarin.iOS, iOS 13在 Xamarin.iOS、iOS 13 中获取连接的 wifi 网络的 SSID
【发布时间】:2020-02-20 20:06:29
【问题描述】:

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

我尝试了在 iOS 13 中提出的解决方案 this question 但没有结果。

我之前成功的 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;
        }
    }
}

有什么建议吗?

【问题讨论】:

  • 在系统设置中检查你的应用是否有定位权限。iOS 13.0以后,没有这个权限,应用将永远不会返回SSID。
  • 好的,暂时可行:)。但是不推荐使用 CaptiveNetwork 的替代方案?文档建议我使用 NetworkExtensio.NEHotspotHelper...
  • 该框架目前尚未大规模开放使用,因此您需要向苹果发送申请并批准它才能访问该框架。所以你需要有一个开发者账号。您可以查看forums.xamarin.com/discussion/156955/…
  • 好吧,看看以后会不会变得更简单
  • 其实你现在还是可以用的:)

标签: xamarin xamarin.ios ios13


【解决方案1】:

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

如果您的应用需要有效的 Wi-Fi SSID 和 BSSID 信息才能运行,您可以执行以下操作: · 对于附件设置应用,使用 NEHotSpotConfiguration API,该 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() 函数。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2021-02-16
    • 1970-01-01
    • 2017-02-02
    • 2020-02-01
    • 2014-02-18
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多