在做wifi分享的時候遇到了很多的問題办素,尤其是這個庫的時候遇到很多坑爹的事情,寫著文章只是為了不讓自己忘記怎么使用的欣尼。
1.這個庫的使用是需要向蘋果發(fā)送郵件申請使用NetworkExtension框架
2.申請下來的配置爆雹,自己去百度吧,很多都寫過了
申請下來之后開始寫代碼
NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
[options setObject:@"hanmiao" forKey:kNEHotspotHelperOptionDisplayName];//這里寫的是你的副標題
dispatch_queue_t queue = dispatch_queue_create("LiyiZhan.WifiDemo", 0);//你的bundle id-如果沒有申請下來寫的話- -里面的內(nèi)容是獲取不到的
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){ //下面是獲取系統(tǒng)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"]) {//這里是判斷系統(tǒng)的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];
}
}
但是這個樣子寫有個坑c倒摹8铺!9交巍册倒!很大的坑。這個坑就是如果分享的wifi有5個你的副標題只能一個一個的展示谋旦。 為了這個我找了1個小時剩失,然后才知道怎么寫。原諒我吧册着,可能是我太笨了拴孤,知識面還是太少了。
[response setNetworkList:@[network]]; 如果你想把你所有的wifi一次性展示出來 修改這里?
1.用數(shù)組接受判斷出來的分享的wifi (shareWifiListArr --這個是數(shù)組)
if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"WISPr Hotspot"]) {//這里是判斷系統(tǒng)的said 和 分享的said 是否一致
[network setConfidence:kNEHotspotHelperConfidenceHigh];
[network setPassword:@"password"];
[shareWifiListArr? addObject: network];//用數(shù)組存儲network 信息
}
[response setNetworkList:shareWifiListArr];//這里改成這個樣子就可以一次性展示多個了
2.還有一個坑就是第一次走這個方法的時候分享的wifi為空的話甲捏。- -就算第二次第三次分享的wifi得到了演熟,還是展示為空---(好吧,我是把這個方法封裝了一下司顿,沒有放在一個界面所以才會這個樣子芒粹,如果放在同一個界面的話是沒有這個問題的,原諒我的知識淺薄吧)因為一般是先獲取系統(tǒng)的wifi信息然后把這個信息上傳到后臺大溜,后臺再給你返回分享的wifi化漆,這個樣子就造成了第一個的wifi分享的數(shù)組為空,為了這我只想到本地緩存的做法钦奋,如果你有什么好的辦法可以說一下座云,非常感謝。
實際我非常的不想上傳付材,我只是怕自己忘記了為什么這個樣子寫而已朦拖,因為我太差了!Q嵯巍- -我代碼真的很差勁的璧帝,別笑話了萬一我玻璃心了就不好了。
3.還有一個更坑爹的是尼瑪通知還不能寫在這個里面富寿。不然就算你的通知走了一遍釋放掉了睬隶。你還是會看到這個通知走了很多次B嗉小!@砀怼T纬恰!后來我就寫在了跳轉(zhuǎn)到無線局域網(wǎng)的哪里窖贤,如果大神們有好的辦法求告訴我怎么寫~著的在這里有點疑問砖顷,項目催的急所以這里沒有很好的思考。