NEHotspotConfigurationManager 是IOS 11刚刚推出的用户获取WiFi信息的框架。
初次使用时,如果没有做响应的设置,会提示NEHotspotConfigurationHelper failed to communicate to helper server.一个原因是工程配置有问题。
要保证 Newwork Extensions和Hotspot Configuration是开启状态。如果你的工程中找不到这两项,可能和你的证书的权限有关,需要去开发者中心重新设置一下你的证书支持的功能。
基本使用:
1.实例化一个配置:NEHotspotConfiguration* configuration = [[NEHotspotConfigurationalloc]initWithSSID:wifi名 passphrase:密码 isWEP:NO];
2.加入配置的WIFI[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configurationc ompletionHandler:^(NSError*_Nullableerror) {
if([[selfgetCurrentWifi]isEqualToString:self.wifiName]) {
if(error) {
NSLog(@"错误原因:%@",error);
}
else{
NSLog(@"加入网络成功");
}
}
}];
这个方法存在一个问题,如果你加入一个不存在的WiFi,会弹出无法加入WiFi的弹框,但是本方法的回调error没有值。在这里,我是通过判断当前wifi是否是我要加入的wifi来解决这个问题的。
3.获取配置过的WIFI列表:[[NEHotspotConfigurationManager sharedManager] getConfiguredSSIDsWithCompletionHandler:^(NSArray * array) {
for(NSString* strinarray) {
NSLog(@"结果:%@",str);
}
}];
如果需要获取当前手机连接的wifi,添加#import<SystemConfiguration/CaptiveNetwork.h>,用下面的方法:
-(NSString*)getCurrentWifi{
NSString* wifiName =@"";
CFArrayRefwifiInterfaces =CNCopySupportedInterfaces();
if(!wifiInterfaces) {
wifiName =@"";
}
NSArray*interfaces = (__bridgeNSArray*)wifiInterfaces;
for(NSString*interfaceNameininterfaces) {
CFDictionaryRefdictRef =CNCopyCurrentNetworkInfo((__bridgeCFStringRef)(interfaceName));
if(dictRef) {
NSDictionary*networkInfo = (__bridgeNSDictionary*)dictRef;
wifiName = [networkInfoobjectForKey:(__bridgeNSString*)kCNNetworkInfoKeySSID];
CFRelease(dictRef);
}
}
CFRelease(wifiInterfaces);
returnwifiName;
}
IOS 12适配问题:
开发者中心,APPID需支持Access WiFi Information功能。
工程中需打开Access WiFi Information开关。
Demo GIT地址:https://github.com/SmallHeater/NEHotspotConfigurationManagerDemo.git