IOS NEHotspotConfigurationManager使用

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