在做wifi分享的时候遇到了很多的问题,尤其是这个库的时候遇到很多坑爹的事情,写着文章只是为了不让自己忘记怎么使用的。
1.这个库的使用是需要向苹果发送邮件申请使用NetworkExtension框架
2.申请下来的配置,自己去百度吧,很多都写过了
申请下来之后开始写代码
NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
[options setObject:@"hanmiao" forKey:kNEHotspotHelperOptionDisplayName];//这里写的是你的副标题
dispatch_queue_t queue = dispatch_queue_create("LiyiZhan.WifiDemo", 0);//你的bundle id-如果没有申请下来写的话- -里面的内容是获取不到的
BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler:^(NEHotspotHelperCommand * cmd){
[cmd createResponse:kNEHotspotHelperResultAuthenticationRequired];
if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList){
NSLog(@"bbbb = %lu",cmd.networkList.count);
for(NEHotspotNetwork* network in cmd.networkList){ //下面是获取系统wifi的信心
NSString* ssid = network.SSID;//ssid - wifi名字
NSString* bssid = network.BSSID;//bssid 相当于apmac
BOOL secure = network.secure;//是否加密
BOOL autoJoined = network.autoJoined;
double signalStrength = network.signalStrength;//信号的强弱
NSLog(@"SSID:%@ # BSSID:%@ # SIGNAL:%f ",ssid,bssid,signalStrength);
}
}
}];
2. 还有就是添加副标题 ---写在if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate .. 里面
for (network in cmd.networkList) {
NSLog(@"COMMAND TYPE After: %ld", (long)cmd.commandType);
if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"WISPr Hotspot"]) {//这里是判断系统的said 和 分享的said 是否一致
double signalStrength = network.signalStrength;
NSLog(@"Signal Strength: %f", signalStrength);
[network setConfidence:kNEHotspotHelperConfidenceHigh];
[network setPassword:@"password"];
NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
NSLog(@"Response CMD %@", response);
[response setNetworkList:@[network]];
[response setNetwork:network];
[response deliver];
}
}
但是这个样子写有个坑!!!!!很大的坑。这个坑就是如果分享的wifi有5个你的副标题只能一个一个的展示。 为了这个我找了1个小时,然后才知道怎么写。原谅我吧,可能是我太笨了,知识面还是太少了。
[response setNetworkList:@[network]]; 如果你想把你所有的wifi一次性展示出来 修改这里
1.用数组接受判断出来的分享的wifi (shareWifiListArr --这个是数组)
if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"WISPr Hotspot"]) {//这里是判断系统的said 和 分享的said 是否一致
[network setConfidence:kNEHotspotHelperConfidenceHigh];
[network setPassword:@"password"];
[shareWifiListArr addObject: network];//用数组存储network 信息
}
[response setNetworkList:shareWifiListArr];//这里改成这个样子就可以一次性展示多个了
2.还有一个坑就是第一次走这个方法的时候分享的wifi为空的话。- -就算第二次第三次分享的wifi得到了,还是展示为空---(好吧,我是把这个方法封装了一下,没有放在一个界面所以才会这个样子,如果放在同一个界面的话是没有这个问题的,原谅我的知识浅薄吧)因为一般是先获取系统的wifi信息然后把这个信息上传到后台,后台再给你返回分享的wifi,这个样子就造成了第一个的wifi分享的数组为空,为了这我只想到本地缓存的做法,如果你有什么好的办法可以说一下,非常感谢。
实际我非常的不想上传,我只是怕自己忘记了为什么这个样子写而已,因为我太差了!!- -我代码真的很差劲的,别笑话了万一我玻璃心了就不好了。
3.还有一个更坑爹的是尼玛通知还不能写在这个里面。不然就算你的通知走了一遍释放掉了。你还是会看到这个通知走了很多次!!!!!后来我就写在了跳转到无线局域网的哪里,如果大神们有好的办法求告诉我怎么写~着的在这里有点疑问,项目催的急所以这里没有很好的思考。