美文网首页
iOS连接指定WiFi

iOS连接指定WiFi

作者: 楼上那只猫 | 来源:发表于2021-11-30 17:24 被阅读0次

需求:用户给定WiFi名和相关配置,在APP中连接指定WiFi。

具体实现:通常来说,WiFi分为普通WiFi和企业WiFi,连接这两种WiFi时,需要提供的配置参数是不一样的。

  1. 新建项目,完成后新增capacity。


    capacity.png
  2. 引入头文件
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

IMG_0034.jpg IMG_0035.jpg

相关文章

网友评论

      本文标题:iOS连接指定WiFi

      本文链接:https://www.haomeiwen.com/subject/eymdxrtx.html