Я мог бы получить 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".