iOS开发 App内自动连接指定Wi-Fi

释放双眼,带上耳机,听听看~!

目前很多智能设备配置网络的时候都有app内部直连Wi-Fi的功能(iOS11之前需要用户跳到Wi-Fi设置界面去连),iOS11后苹果提供 NEHotspotConfigurationManager 类用于app内直连周边的Wi-Fi;具体步骤:

1、向开发者中心申请使用NEHotspotHelper的权限(理由要充分,详述app使用NEHotspotHelper的理由,一般两周给结果);
2、给App ID的entitlements file配置权限:在这里插入图片描述
3、在Xcode-Build Phases中导入NetworkExtension.framework框架:
在这里插入图片描述
4、在Xcode – Capabilities 中开启Hostpot Configuration:
在这里插入图片描述
5、代码实现:

 //导入头文件
#if TARGET_IPHONE_SIMULATOR
#else
#import <NetworkExtension/NetworkExtension.h>
#endif
//1、app内直连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的弹框,但是本方法的回调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;
}

人已赞赏
iOS文章

iOS 改变UIButton内部控件的方法

2020-2-5 2:34:13

iOS文章

iOS中设置view圆角化的四种方法

2020-2-5 2:56:48

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索