首页 文章详情

iOS 获取手机当前连接的 WiFi 信息

iOS开发 | 339 2021-12-12 13:51 0 0 0
UniSMS (合一短信)
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


作者:掘金 形影相吊

https://juejin.cn/post/7032853944170709006


一、应用背景

物联网开发中,对设备进行配网时需要打开手机的WiFi功能,并且连接上相应的设备WiFi热点,把家庭的WiFi名称和密码通过TCP连接或UDP广播的方式发送给设备。设备接入到家庭的WiFi名称和密码后就可以连接上家庭WiFi,将设备注册到云端,从而实现设备上云。那么在iOS中,我们如何获取手机当前连接的WiFi信息呢?

二、前提

iOS中要获取手机当前连接的WiFi信息,iOS13.0之后必须先打开定位,iOS14.0之前还要打包精准位置,详情可以参考iOS精确位置,然后去设置APP连接上任意的WiFi。

三、获取方式

1.获取SSID---WiFi名称

+ (NSString *)getWifiSSID {
    NSString *ssid = nil;
    CFArrayRef arrRef = CNCopySupportedInterfaces();
    NSArray *ifs = ( __bridge id)arrRef;
    for (NSString *ifnam in ifs) {
        CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(( __bridge CFStringRef)ifnam);
        NSDictionary *info = ( __bridge id)dicRef;
        if (info[@"BSSID"]) {
            ssid = info[@"SSID"];
        }
        if(dicRef !=nil) {
            CFRelease(dicRef);
        }
    }
    if(arrRef != nil) {
        CFRelease(arrRef);
    }
    return ssid;
}

2.获取BSSID---WiFi的MAC

+ (NSString *)getWifiBSSID {
        NSString *bssid = @"";
        CFArrayRef arrRef = CNCopySupportedInterfaces();
        NSArray *ifs = ( __bridge id)arrRef;
        for(NSString *ifnam in ifs) {
            CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(( __bridge CFStringRef)ifnam);
            NSDictionary *info = ( __bridge id)dicRef;
            if (info[@"BSSID"]) {
                bssid = info[@"BSSID"];
            }
           if(dicRef != nil) {
                CFRelease(dicRef);
            }
        }
        if (arrRef != nil) {
            CFRelease(arrRef);
        }
        return bssid;
}

四、写在最后的重点

iOS中提供了快速获取手机当前连接的WiFi的信息,可以方便我们快速设置wifi信息和密码完成为智能设备的联网;但这只是其中的一种方式,而直接获取手机当前连接的wifi的方式也存在配网失败的风险。

目前大部分的设备只支持2.4G频段的WiFi,5G频段的WiFi设备是无法完成联网操作的,而手机是可以同时支持2.4G和5G的;所以如果手机当前连接的是5G频段的WiFi,我们是无法使用其为设备完成联网操作的。这里提供一些其他设置配网wifi的方式:

  • 1.手机输入WiFi名称:这种方式出错率太高,并且非常不友好,不过可以作为系统原因或用户设置原因(如未开启定位或精确位置时)导致无法通过上面的方法获取到手机连接的WiFi信息时的兜底方案;
  • 2.模块支持搜索附近WiFi:这种方式需要设备内置的联网模块本身支持搜索附近的WiFi热点,并且最好同时支持蓝牙,可以方便通过蓝牙连接把设备搜索到的WiFi信息发送给手机app,手机端可以选择设置已经发现的热点,设置密码后即可进行对设备的配网。这种方式就不要求手机是否开启定位,甚至不需要手机连接了WiFi,而且不用考虑是否是5G频段的WiFi,因为设备能搜索到的WiFi热点肯定也支持连接WiFi热点了;不过这种方式成本高,需要设备同时支持WiFi模块和蓝牙模块。


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter