2

我正在使用下面的代码来检索 iPod 连接的 WiFi 网络的 SSID。

NSArray *ifs = (id)CNCopySupportedInterfaces();
NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
id info = nil;
for (NSString *ifnam in ifs) {
    info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
    NSLog(@"%s: %@ => %@", __func__, ifnam, info);
    if (info && [info count]) {
        break;
    }
    [info release];
}

有时,此代码未返回我的设备连接的网络的正确 SSID。关于为什么未正确检索 SSID 的任何指针?CNCopyCurrentNetworkInfo 包是否依赖于设备的 iOS 版本?

谢谢。

4

3 回答 3

6
  1. 将 SystemConfiguration.framework 添加到项目中。

  2. import < SystemConfiguration/CaptiveNetwork.h >

  3. CFArrayRef myArray = CNCopySupportedInterfaces();
    CFStringRef interfaceName = CFArrayGetValueAtIndex(myArray, 0);
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(interfaceName);
    NSDictionary *dict = ( NSDictionary*) captiveNtwrkDict;
    NSString* ssid = [dict objectForKey:@"SSID"];
    NSLog(@"%s ssid : %@",__FUNCTION__, [ssid description]);
    
  4. 对于iOS 12及更高版本,您必须从功能中启用它。

重要 要在 iOS 12 及更高版本中使用此功能,请在 Xcode 中为您的应用启用访问 WiFi 信息功能。当您启用此功能时,Xcode 会自动将 Access WiFi Information 权利添加到您的权利文件和 App ID 中。文档链接

于 2014-04-17T09:16:32.307 回答
0

Yes. CNCopyCurrentNetworkInfo is available only in iOS 4.1 and later.

For more info ,please look at the developer.apple SystemConfiguration Reference

you can check the sample code here

于 2012-11-06T04:20:52.590 回答
0

从 iOS 13 开始,CNCopyCurrentNetworkInfo API 将不再返回有效的 Wi-Fi SSID 和 BSSID 信息。相反,默认返回的信息将是:

SSID:“Wi-Fi”或“WLAN”(中国 SKU 将返回“WLAN”) BSSID:“00:00:00:00:00:00”

如果您的应用程序使用此 API,Apple 现在鼓励您采用不需要 Wi-Fi 或网络信息的替代方法。来自 CNCopyCurrentNetworkInfo 的有效 SSID 和 BSSID 信息仍将提供给 VPN 应用程序、使用 NEHotspotConfiguration 配置当前 Wi-Fi 网络的应用程序以及已获得通过位置服务访问用户位置权限的应用程序。

您可以在最新的 iOS 13 测试版上测试您的应用,以确保其正常运行。如果您的应用程序需要有效的 Wi-Fi SSID 和 BSSID 信息才能运行,您可以执行以下操作: 对于配件设置应用程序,使用 NEHotSpotConfiguration API,它现在可以选择传递您的应用程序期望连接到的 SSID 热点的前缀. 对于其他类型的应用,请使用 CoreLocation API 请求用户同意访问位置信息。

于 2019-08-07T20:20:37.190 回答