需求:用户给定WiFi名和相关配置,在APP中连接指定WiFi。
具体实现:通常来说,WiFi分为普通WiFi和企业WiFi,连接这两种WiFi时,需要提供的配置参数是不一样的。
-
新建项目,完成后新增capacity。
capacity.png - 引入头文件
import NetworkExtension
主要使用到类NEHotspotConfigurationManager
,NEHotspotConfiguration
,NEHotspotEAPSettings
.
其中NEHotspotEAPSettings
是和WiFi相关配置相关的类。
//ssid 就是WiFi的名字,也就是我们在设置的WiFi列表中看到的那些名字
let ssid = "mywifi"
let manager = NEHotspotConfigurationManager.shared
manager.removeConfiguration(forSSID: ssid)
var configure:NEHotspotConfiguration?
let enterpriseSetting = NEHotspotEAPSettings.init()
//这里先以企业WiFi为例子
enterpriseSetting.username = enterpriseName
enterpriseSetting.password = enterprisePassphrase
//这里的trustedServernames可以询问管理员,也可以在首次连接WiFi的时候,从profile文件中看到.
enterpriseSetting.trustedServerNames = [enterpriseDomain]
enterpriseSetting.supportedEAPTypes = [NSNumber(value: convertEnterpriseTypeToEAPTypes(type: enterpriseType))]
configure = NEHotspotConfiguration.init(ssid: ssid, eapSettings: enterpriseSetting)
//对于非企业WiFi,根据是否有密码,选择不同的api
if passphrase == "" {
configure = NEHotspotConfiguration.init(ssid: ssid)
} else {
configure = NEHotspotConfiguration.init(ssid: ssid, passphrase: passphrase, isWEP: false)
}
//开始连接
manager.apply(configure!) { error in
}
//这里的转换主要是对应实际的枚举值
func convertEnterpriseTypeToEAPTypes(type: String) -> Int {
switch type {
case "EAPTLS ":
return 13
case "EAPTTLS":
return 21
case "EAPPEAP":
return 25
case "EAPFAST":
return 43
default:
return 25
}
}
关于eaptype,可参考
https://developer.apple.com/documentation/networkextension/nehotspoteapsettings/eaptype
如何获取trustedServerNames
?
在iPhone的设置,网络列表中,选择要连接的WiFi,输入username和password,确定后会弹出一个certificate需要trust,点击more detail
,新的页面中,common name
一栏即是需要的trustedServerNames
网友评论