iOS中获取WiFi的SSID(CNCopySupportedInterfaces())

获取当前设备连接WiFi:

ios5之前可以通过读取配置文件获取,ios5以后苹果修改wifi列表文件位置,只有root权限才可以读取.
ios4:/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager
ios5:/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration

iOS4.1之后 : CNCopySupportedInterfaces()
1.引用头文件<SystemConfiguration/CaptiveNetwork.h>
2.通过CNCopySupportedInterfaces获取wifi列表,实际测试中返回数组中只有一个值,即当前连接的wifi。

+ (NSString *)getWifiSSID {
    
    NSString *ssid = nil;
    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    for (NSString *ifnam in ifs) {
        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info[@"SSID"]) {
            ssid = info[@"SSID"];
        }
    }
    return ssid;
}

出现问题 :

Xcode10正式版在9月17号发布, 使用最新版的Xcode编译某项目发现App在iOS 12中无法获取WiFi的SSID.
发现 : 在iOS 12中,经断点调试发现info为nil。猜测是CNCopyCurrentNetworkInfo方法在iOS 12中有了变化。通过查看官方文档,发现文档中增加了Important字样的描述:


Impotant.png

解决方法:

注意 : WiFi信息只有在真机上才能获取下来,在模拟器上为NULL
1.开发者证书上配置ID支持Access WiFi Information的能力
2.Xcode配置 : Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON
3.出现.entitlements文件,修改为Access WiFi Information为YES


Snip20181219_2.png

Snip20181219_3.png

至此,就能在iOS 12+中正常获取到WiFi的SSID了.

更新: 在iOS13之后WiFi的SSID的获取

在iOS13中, CNCopyCurrentNetworkInfo进行了更新, 不仅要在Access WiFi Information设置为YES的情况下, 还需要符合下列三项条件中的至少一项才会返回正确的 CNCopyCurrentNetworkInfo 函数值,否则仍然会返回 nil.

- The app uses Core Location, and has the user’s authorization to use location information.
- The app uses the NEHotspotConfiguration API to configure the current Wi-Fi network.
- The app has active VPN configurations installed.

即::

- 使用定位功能,并且获得了定位服务权限的应用;
- 使用NEHotspotConfiguration配置过的Wi-Fi;
- 应用程序已安装有效的VPN配置

至少要满足其一, 接下来以开启定位功能为例:

  1. 首先, 开启WiFi权限的界面稍有改动:
    image.png
  2. 设置可获取WiFi信息:
    image.png
  3. info.plist文件中添加定位服务权限:
    image.png
  4. 获取地理位置信息:
    image.png
  5. 最后通过上文提到的getWifiSSID方法就可以获取到WiFi的SSID了.

其实, 在想要获取WiFi的相关信息之前, 如果APP已经满足以上三点中的任意一点的话, 其实就能正常获取到info的信息了.

.End

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 30岁之前,我对除先生之外的男人不太感兴趣,认为都结婚生子了,别的男性于我有何干,况且觉得先生能给予我精神上...
    观沧海明月阅读 354评论 0 0
  • 今天一直在想昨天蓓蕾老师给我评论的话“修行其实是修自己。”我在想自己做一个早上签到表的统计,这个背后的意是什么?是...
    一粒麦田阅读 349评论 1 2
  • 给点阳光就灿烂 小兔乖乖 这几天忽略一下儿子,但感觉自己身上积蓄已久的力量,伴随着和企鹅妈妈参加各种活动,找到了属...
    企鹅妈妈阅读 426评论 0 0
  • 他说:大礼堂后有片小树林,没人知道那地方。他是拣篮球时发现的。 他微微一笑,露出白白的牙齿。花在那一刻,开了。 在...
    许金玲阅读 309评论 1 1