美文网首页
NetworkExtension 的方法是用

NetworkExtension 的方法是用

作者: 韩喵 | 来源:发表于2016-07-28 16:40 被阅读0次

在做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.还有一个更坑爹的是尼玛通知还不能写在这个里面。不然就算你的通知走了一遍释放掉了。你还是会看到这个通知走了很多次!!!!!后来我就写在了跳转到无线局域网的哪里,如果大神们有好的办法求告诉我怎么写~着的在这里有点疑问,项目催的急所以这里没有很好的思考。

相关文章

网友评论

      本文标题:NetworkExtension 的方法是用

      本文链接:https://www.haomeiwen.com/subject/kxmajttx.html