【问题标题】:Issues in using CNCopyCurrentNetworkInfo使用 CNCopyCurrentNetworkInfo 的问题
【发布时间】:2012-10-25 23:59:23
【问题描述】:

我正在使用下面的代码来检索 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 版本?

谢谢。

【问题讨论】:

标签: objective-c ios ios5 ios4 ios6


【解决方案1】:
  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 中。 Documentation link

【讨论】:

    【解决方案2】:

    是的。 CNCopyCurrentNetworkInfo 仅在 iOS 4.1 及更高版本中可用。

    欲了解更多信息,请查看developer.apple SystemConfiguration Reference

    您可以查看示例代码here

    【讨论】:

      【解决方案3】:

      从 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 请求用户同意访问位置信息。

      【讨论】:

      • 你需要iOS 13的localtion权限,然后,你可以检索ssid。请注意,iOS13 中存在一个错误,有时即使有位置权限,您也无法检索 ssid。 (iOS 13.1.2)
      • @RicardoYes 你在我的应用程序中是对的我正在使用位置访问虽然无法获得 CNCopyCurrentNetworkInfo 返回零。任何建议如何在 ios 13 或更高版本中访问 wifi 信息?
      猜你喜欢
      • 2011-08-07
      • 2019-10-28
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多