Получение SSID ПОДКЛЮЧЕННОГО WIFI на IOS 12 - Xamarin (Обновлено для iOS 13) - PullRequest
0 голосов
/ 27 сентября 2018

Я мог бы получить ssid подключенного Wi-Fi к моему iPhone.После установки Xcode 10 и обновления Visual Studio для 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;
    }

Я пыталсядобавить право «Доступ к WiFi-информации» для приложения iOS 12, как упомянуто здесь, но приложение по-прежнему получает пустой ssid: https://forums.xamarin.com/discussion/139476/adding-access-wifi-information-entitlement-for-ios-12-apps

Буду благодарен, если кто-нибудь сможет помочь.

РЕШЕНО: Я применил Access WIFI Information для своего Apple ID.Затем я заново создал свой профиль Provisioning и открыл его в своем Xcode.Не забудьте добавить Entitlements.plist в пользовательские развлечения в ios Bundle Signing.Теперь он работает правильно.

Обновлено для iOS 13: Apple объявила, что iOS 13, API-интерфейс CNCopyCurrentNetworkInfo больше не будет возвращать действительные данные SSID и BSSID Wi-Fi.

Если вашему приложению для работы требуются действительные данные SSID и BSSID Wi-Fi, вы можете сделать следующее: · Для приложений настройки аксессуаров используйте API-интерфейс NEHotSpotConfiguration, который теперь может передавать префикс SSID.горячая точка вашего приложения ожидает подключения.· Для других типов приложений используйте API-интерфейс CoreLocation, чтобы запросить согласие пользователя на доступ к информации о местоположении.

Итак, я обновил вышеуказанное решение следующим образом:

  • Добавьте этот ключ в ваш 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();
    
    }
    
  • Вызовите функцию GetLocationConsent () перед вызовом "CaptiveNetwork".

1 Ответ

0 голосов
/ 28 сентября 2018

Чтобы использовать эту функцию в iOS 12 и более поздних версиях, включите функцию Access WiFi Information для вашего приложения. enter image description here

Так что вам нужно проверить Access WiFi Information в appid.

enter image description here

...