You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:55:45