NEHotspotConfiguration中joinOnce属性的作用是什么?附iOS自动连WiFi代码
NEHotspotConfiguration的joinOnce属性核心作用
- 一次性连接,自动清除配置:当你把
joinOnce设为YES时,这个WiFi配置是「临时」的——设备成功连接到目标SSID后,系统会自动删除这个NEHotspotConfiguration条目,不会把该WiFi加入到系统的「已保存网络」列表里。 - 适用场景:非常适合临时连接公共WiFi(比如机场、商场的免费WiFi),用完就自动“忘记”,避免以后设备自动连接到这些可能不安全或不需要的网络。
- 对比
NO的行为:如果设为NO,系统会把这个WiFi保存下来,以后只要该WiFi在信号范围内,设备就会自动尝试连接,直到用户手动在设置里删除。
结合你的WiFi自动连接代码分析
你的代码逻辑是对的:根据是否有密码初始化不同的配置,然后设置joinOnce=YES提交给系统。这里给你补充几个关键注意点和优化建议:
1. 必须的权限要求
iOS 13及以上版本,使用NEHotspotConfigurationManager需要两个关键配置:
- 开发者账号需要开启
com.apple.developer.networking.wifi-info权限(在Apple Developer后台的App ID配置里) - Info.plist中必须添加定位权限描述:
NSLocationWhenInUseUsageDescription或NSLocationAlwaysAndWhenInUseUsageDescription,因为系统需要定位权限来扫描WiFi网络。
2. 完善错误处理
你的代码里的completionHandler只写了一半,这里给你补全常见错误的处理逻辑:
if([Utils isEmpty:password]){ configuration = [[NEHotspotConfiguration alloc] initWithSSID: wifiSSID]; }else{ configuration = [[NEHotspotConfiguration alloc] initWithSSID: wifiSSID passphrase: password isWEP: NO]; } configuration.joinOnce = YES; [[NEHotspotConfigurationManager sharedManager] applyConfiguration: configuration completionHandler: ^ (NSError * _Nullable error) { if (error) { NSLog(@"WiFi连接请求失败:%@", error.localizedDescription); // 根据错误码针对性处理 switch (error.code) { case NEHotspotConfigurationErrorUserDenied: // 用户在系统弹窗里拒绝了连接请求 NSLog(@"用户拒绝了WiFi连接权限"); break; case NEHotspotConfigurationErrorInvalid: // SSID为空、密码格式错误(比如WEP密码长度不对) NSLog(@"WiFi配置无效,请检查SSID或密码"); break; case NEHotspotConfigurationErrorAlreadyAssociated: // 设备已经连接到该WiFi了 NSLog(@"已经连接到目标WiFi"); break; case NEHotspotConfigurationErrorNotSupported: // 设备系统版本低于iOS 11,不支持该API NSLog(@"当前设备不支持自动连接WiFi功能"); break; default: break; } } else { NSLog(@"WiFi连接请求已提交,joinOnce模式下连接成功后会自动清除配置"); } }];
3. 额外注意事项
- 如果设备已经手动连接过该WiFi(即该WiFi在系统已保存列表里),设置
joinOnce=YES调用applyConfiguration不会改变已保存的配置,也不会自动删除它——joinOnce只对通过NEHotspotConfiguration添加的临时配置生效。 joinOnce=YES时,即使连接过程中失败(比如密码错误),系统也会删除这个临时配置,不会留在系统里。- iOS 11以下版本不支持
NEHotspotConfiguration框架,如果你需要兼容更低版本,只能用私有API(但无法通过App Store审核)。
内容的提问来源于stack exchange,提问作者Kikki
相关产品推荐
相关产品推荐

