需求:用戶給定WiFi名和相關(guān)配置,在APP中連接指定WiFi。
具體實現(xiàn):通常來說,WiFi分為普通WiFi和企業(yè)WiFi,連接這兩種WiFi時,需要提供的配置參數(shù)是不一樣的。
-
新建項目,完成后新增capacity。
capacity.png - 引入頭文件
import NetworkExtension
主要使用到類NEHotspotConfigurationManager,NEHotspotConfiguration,NEHotspotEAPSettings.
其中NEHotspotEAPSettings是和WiFi相關(guān)配置相關(guān)的類。
//ssid 就是WiFi的名字,也就是我們在設(shè)置的WiFi列表中看到的那些名字
let ssid = "mywifi"
let manager = NEHotspotConfigurationManager.shared
manager.removeConfiguration(forSSID: ssid)
var configure:NEHotspotConfiguration?
let enterpriseSetting = NEHotspotEAPSettings.init()
//這里先以企業(yè)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)
//對于非企業(yè)WiFi,根據(jù)是否有密碼,選擇不同的api
if passphrase == "" {
configure = NEHotspotConfiguration.init(ssid: ssid)
} else {
configure = NEHotspotConfiguration.init(ssid: ssid, passphrase: passphrase, isWEP: false)
}
//開始連接
manager.apply(configure!) { error in
}
//這里的轉(zhuǎn)換主要是對應(yīng)實際的枚舉值
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
}
}
關(guān)于eaptype,可參考
https://developer.apple.com/documentation/networkextension/nehotspoteapsettings/eaptype
如何獲取trustedServerNames?
在iPhone的設(shè)置,網(wǎng)絡(luò)列表中,選擇要連接的WiFi,輸入username和password,確定后會彈出一個certificate需要trust,點擊more detail,新的頁面中,common name一欄即是需要的trustedServerNames

IMG_0034.jpg

IMG_0035.jpg
