目前很多智能設備配置網(wǎng)絡的時候都有app內(nèi)部直連Wi-Fi的功能(iOS11之前需要用戶跳到Wi-Fi設置界面去連),iOS11后蘋果提供 NEHotspotConfigurationManager 類用于app內(nèi)直連周邊的Wi-Fi臼勉;具體步驟:
1、向開發(fā)者中心申請使用NEHotspotHelper的權(quán)限(理由要充分担败,詳述app使用NEHotspotHelper的理由琢歇,一般兩周給結(jié)果);
2克蚂、給App ID的entitlements file配置權(quán)限:
3蛇更、在Xcode-Build Phases中導入NetworkExtension.framework框架:
4盆佣、在Xcode - Capabilities 中開啟Hostpot Configuration:
5、代碼實現(xiàn):
//導入頭文件
#if TARGET_IPHONE_SIMULATOR
#else
#import <NetworkExtension/NetworkExtension.h>
#endif
//1械荷、app內(nèi)直連Wi-Fi:
NEHotspotConfiguration * hotmode = [[NEHotspotConfiguration alloc] initWithSSID:@"wifiSSID" passphrase:@"password" isWEP:NO];
__weak typeof(self) weakSelf = self;
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotmode completionHandler:^(NSError * _Nullable error) {
if (error) {
if (error.code == NEHotspotConfigurationErrorAlreadyAssociated) {
//已連接
}
else if (error.code == NEHotspotConfigurationErrorUserDenied) {
//用戶點擊取消
}
else{
//注:這個方法存在一個問題共耍,如果你加入一個不存在的WiFi,會彈出無法加入WiFi的彈框吨瞎,但是本方法的回調(diào)error沒有值痹兜。在這里,我是通過判斷當前wifi是否是我要加入的wifi來解決這個問題的
}
}
}];
//2颤诀、獲取配置過的WIFI列表:
if (@available(iOS 11.0, *)) {
[[NEHotspotConfigurationManager sharedManager] getConfiguredSSIDsWithCompletionHandler:^(NSArray * array) {
}];
}
//3字旭、獲取當前手機連接的wifi:
//導入
#import<SystemConfiguration/CaptiveNetwork.h>
- (NSString *)getWifiName {
NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();
id info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge id)CNCopyCurrentNetworkInfo((CFStringRef)CFBridgingRetain(ifnam));
if (info && [info count]) {
break;
}
}
if ([info isKindOfClass:[NSDictionary class]]) {
NSString *wifiSsid = [info objectForKey:@"SSID"];
return wifiSsid;
}
return nil;
}