
1、為什么寫(xiě)這篇文章?
開(kāi)發(fā)的App中接入了多個(gè)廠方的行車(chē)記錄儀(通過(guò)Wi-Fi控制),所以Wi-Fi信息就比較重要了,而本地網(wǎng)絡(luò)權(quán)限也會(huì)有導(dǎo)致有一些問(wèn)題。
2、獲取Wi-Fi信息
獲取當(dāng)前連接的Wi-Fi信息需要引入#import <SystemConfiguration/CaptiveNetwork.h>,使用CNCopyCurrentNetworkInfo接口,在iOS12一下是沒(méi)有問(wèn)題。
但是:
iOS12 <1>需要在Capabilities中加入Access WiFi Information
iOS13 <2>定位開(kāi)啟權(quán)限和<1>
所以,目前最新適配到iOS14需要<1>和<2>同時(shí)開(kāi)啟
代碼如下:Wi-Fi名(SSID)和mac地址(BSSID)
NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
id info = nil;
for (NSString *ifname in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef)ifname);
if (info && [info count]) {
break;
}
}
NSDictionary *dic = (NSDictionary *)info;
NSString *ssid = [dic objectForKey:@"SSID"];
NSString *bssid = [[dic objectForKey:@"BSSID"] lowercaseString];
//補(bǔ)0操作可以不要
if (bssid.length > 0) {
NSArray *arr = [bssid componentsSeparatedByString:@":"];
NSMutableArray *newArr = [NSMutableArray arrayWithCapacity:arr.count];
for (NSString *subStr in arr) {
if (subStr.length == 1) {
[newArr addObject:[NSString stringWithFormat:@"0%@",subStr]];
}
else {
[newArr addObject:subStr];
}
}
bssid = [newArr componentsJoinedByString:@":"];
}
NSLog(@"ssid = %@, bssid = %@",ssid,bssid);
3、本地網(wǎng)絡(luò)權(quán)限(Local Network)
關(guān)于為什么會(huì)彈出這個(gè)權(quán)限提示,目前找到了這個(gè)兩篇文章文章1、文章2,里面寫(xiě)的還沒(méi)有具體測(cè)試過(guò)。
目前測(cè)下來(lái),本地網(wǎng)絡(luò)權(quán)限的開(kāi)關(guān)并不會(huì)影響正常的使用,比如公司服務(wù)器或第三方的接口請(qǐng)求都沒(méi)有影響。
這里涉及到了廣域網(wǎng)和局域網(wǎng)的區(qū)別,我了解一些比較基礎(chǔ)的知識(shí),至于蘋(píng)果怎么區(qū)別的,希望有大神能指點(diǎn)一下。
連接像沒(méi)有搭載物聯(lián)網(wǎng)卡的記錄儀的Wi-Fi,連接成功后手機(jī)狀態(tài)欄是沒(méi)有Wi-Fi標(biāo)記的(這里也好奇是為什么,家里的網(wǎng)欠費(fèi)也有Wi-Fi標(biāo)記啊......)。這個(gè)時(shí)候本地網(wǎng)絡(luò)權(quán)限就很有用處了,你開(kāi)了訪問(wèn)接口是正常的,但是不開(kāi)機(jī)會(huì)報(bào)錯(cuò)。
比如調(diào)用http://192.168.1.254?custom=1&cmd=2016
正常會(huì)返回session Requesting Result = <?xml version="1.0" encoding="UTF-8" ?>
沒(méi)權(quán)限返回Error Domain=NSURLErrorDomain Code=-1009 "似乎已斷開(kāi)與互聯(lián)網(wǎng)的連接。"
4、獲取本地網(wǎng)絡(luò)權(quán)限(Local Network)
目前看了這篇文章,說(shuō)是用Ping庫(kù)和返回錯(cuò)誤碼65可以判斷到。
具體明天測(cè)試了再更結(jié)果,打工人餓的不行了......