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