接入(接入交换机)
??关注后回复 “进群” ,拉你进程序员交流群??
作者:掘金 形影相吊
一、应用背景
物联网开发中,对设备进行配网时需要打开手机的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 inifs) {
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);
}
returnssid;
}
2.获取BSSID---WiFi的MAC+ (NSString *)getWifiBSSID {
NSString *bssid = @ "";
CFArrayRef arrRef = CNCopySupportedInterfaces;
NSArray *ifs = ( __bridge id)arrRef;
for(NSString *ifnam inifs) {
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);
}
returnbssid;
}
四、写在最后的重点
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 资料后,汇总整理出来,可以说是程序员面试必备! 所有资料都整理到网盘了,欢迎下载!
面试题】即可获取
在看点这里好文分享给更多人↓↓
标签: 接入
相关文章
发表评论