【问题标题】:Getting the SSID of the CONNECTED WIFI on IOS 12- Xamarin (Updated for iOS 13)在 IOS 12-Xamarin 上获取 CONNECTED WIFI 的 SSID(针对 iOS 13 更新)
【发布时间】:2018-09-27 14:38:00
【问题描述】:

我可以将连接的 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-entitlement-for-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() 函数。

【问题讨论】:

    标签: xcode visual-studio xamarin ios13 ssid


    【解决方案1】:

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

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

    【讨论】:

    • 我已经为我的应用 ID 启用了它,但我仍然无法获取我的 ssid。我需要更新我的苹果证书才能看到结果吗?另外,我正在使用 xamarin,所以我还需要在我的 cXode 中更新它吗?
    • 你可以试一试。
    • 感谢您的回答。我为我的 Apple ID 申请了访问 WIFI 信息。然后我再次重新生成了我的 Provisioning 配置文件并在我的 Xcode 中打开它。不要忘记在 ios Bundle Signing 的 Custom Entertainments 中添加 Entitlements.plist。现在它可以正常工作了。
    猜你喜欢
    • 2019-05-26
    • 2020-02-01
    • 2020-02-20
    • 1970-01-01
    • 2020-10-16
    • 2021-02-13
    • 1970-01-01
    • 2015-09-28
    • 2021-10-10
    相关资源
    最近更新 更多