Swift中解码AVFoundation读取的WiFi二维码字符串并实现连接
Swift解码WiFi二维码字符串并实现连接方案
一、解析WiFi二维码字符串
WiFi二维码的标准格式是WIFI:S:<SSID>;T:<加密类型>;P:<密码>;;,我们可以通过字符串分割和键值匹配提取核心信息:
import Foundation func parseWiFiQRCode(_ qrString: String) -> (ssid: String?, password: String?, securityType: String?) { // 移除开头的"WIFI:"前缀 guard let content = qrString.components(separatedBy: "WIFI:").last else { return (nil, nil, nil) } // 按分号分割字段,过滤空内容 let fields = content.components(separatedBy: ";").filter { !$0.isEmpty } var ssid: String? var password: String? var securityType: String? for field in fields { let keyValue = field.components(separatedBy: ":") guard keyValue.count == 2 else { continue } let key = keyValue[0] let value = keyValue[1] switch key { case "S": ssid = value case "T": securityType = value case "P": password = value default: break } } return (ssid, password, securityType) }
二、提取信息并显示到Label
解析完成后,直接将结果赋值给对应Label,注意处理可选值避免空指针:
// 假设你已创建两个UILabel实例:ssidLabel、passwordLabel let qrResult = "WIFI:S:name-of-network;T:WPA;P:password;;" let (ssid, password, _) = parseWiFiQRCode(qrResult) ssidLabel.text = "WiFi名称:\(ssid ?? "未获取到")" passwordLabel.text = "WiFi密码:\(password ?? "未获取到")"
三、实现WiFi连接
iOS中连接WiFi需要使用NetworkExtension框架的NEHotspotConfigurationManager,具体步骤如下:
1. 添加权限配置
在Info.plist中添加以下键值对(右键选择Add Row):
- 键:
NSLocationWhenInUseUsageDescription,值:"需要定位权限以连接WiFi网络"(iOS13及以上必须添加,否则连接失败) - 键:
NSAppTransportSecurity-> 子键Allow Arbitrary Loads,值设为YES(部分场景需要)
2. 连接WiFi的代码实现
import NetworkExtension func connectToWiFi(ssid: String, password: String, securityType: String?) { guard #available(iOS 11.0, *) else { print("iOS版本过低,不支持WiFi连接API") return } let configuration: NEHotspotConfiguration // 根据加密类型创建配置 if securityType == nil || securityType?.lowercased() == "nopass" { // 无密码WiFi configuration = NEHotspotConfiguration(ssid: ssid) } else { // WPA/WPA2加密WiFi configuration = NEHotspotConfiguration(ssid: ssid, passphrase: password, isWEP: false) } // 允许自动加入该网络 configuration.joinOnce = false NEHotspotConfigurationManager.shared.apply(configuration) { error in if let error = error { print("WiFi连接失败:\(error.localizedDescription)") // 可在此处给用户显示失败提示 } else { print("WiFi连接成功") // 连接成功后的业务逻辑 } } }
3. 调用连接函数
结合解析代码,调用方式如下:
let qrResult = "WIFI:S:name-of-network;T:WPA;P:password;;" let (ssid, password, securityType) = parseWiFiQRCode(qrResult) if let ssid = ssid, let password = password { connectToWiFi(ssid: ssid, password: password, securityType: securityType) } else { print("WiFi信息解析失败,无法连接") }
注意事项
NEHotspotConfiguration仅支持iOS11及以上版本,必须做版本判断- 设备处于热点模式时,无法使用该API连接WiFi
- 若设备已连接过目标WiFi,调用
apply会直接返回成功 - 如需移除已配置的WiFi,可调用
NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: ssid)
内容的提问来源于stack exchange,提问作者miks
相关产品推荐
相关产品推荐

