iOS开发APP内自动链接wifi

公司在做智能硬件方面的业务,有一个自动链接wifi的需求,在网上查了半天,目前因为苹果的限制,只能ios11以上才能用,有点坑,现在整理一下发出来。

首先添加依赖库NetworkExtension.framework

iOS开发APP内自动链接wifi

 

然后打开Capabilities里的Hotspot Configuration

iOS开发APP内自动链接wifi

 

最后上代码

添加头文件

#import <NetworkExtension/NetworkExtension.h>

#import <SystemConfiguration/CaptiveNetwork.h>

 

链接代码

//创建将要连接的WIFI配置实例

- (void)connectWifi {

    if (@available(iOS 11.0, *)) {

        //Hachi_Office为wifi名称,hachismart是密码,这里换上你自己的wifi名和密码

        NEHotspotConfiguration * hotspotConfig = [[NEHotspotConfiguration alloc] initWithSSID:@"Hachi_Office" passphrase:@"hachismart.com" isWEP:NO];

        

        // 开始连接 (调用此方法后系统会自动弹窗确认)

        [[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {            

            NSLog(@"%@", error);

            if (!error) {                

                //根据名称判断是否链接成功

                if ([[self getCurrentWifi] isEqualToString:@"Hachi_Office"]) {

                    NSLog(@"链接成功");

                }

            }else{

                //如果本来就链接了这个wifi,也会走到这里来

                NSLog(@"%@", error.localizedDescription);

            }  

        }];

    } else {

        // ios 10以下(包括10)在这里处理

    }

}

 

//获取当前wifi名称

-(NSString *)getCurrentWifi

{

    NSString *ssid = nil;

    NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();

    for (NSString *ifname in ifs) {

        NSDictionary *info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifname);

        if (info[@"SSID"])

        {

            ssid = info[@"SSID"];

        }

    }

    return ssid;

}