Получение SSID подключенной сети Wi-Fi в Xamarin.iOS, iOS 13 - PullRequest
0 голосов
/ 24 октября 2019

После перехода с iOS 12 на 13 я больше не могу получить SSID подключенной сети Wi-Fi.

Я пробовал решение для 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;
        }
    }
}

Любое предложение?

1 Ответ

0 голосов
/ 06 ноября 2019

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

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

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

Добавьте этот ключ к вашемуinfo.plist:

 <key>NSLocationWhenInUseUsageDescription</key>
 <string>Your Description</string>

Используйте API-интерфейс CoreLocation для запроса согласия пользователя на доступ к информации о местоположении.

    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".

...