NEHotspotConfigurationManager 没有错误 password/SSID
NEHotspotConfigurationManager no error for invalid password/SSID
当我使用 NEHotspotConfigurationManager
连接到 WiFi 接入点时,我故意使用了无效的密码或 SSID,我没有得到我期望的编程反馈。用户通过警报收到连接失败的反馈,但在提供给 apply
函数的完成块中,error
为 nil,与成功案例相同。这让我无法区分成功案例和失败案例。 NEHotspotConfigurationError
有 .invalidSSID
和 .invalidWPAPassphrase
。我希望这些会被退回。这对我来说就像一个雷达,但我想先在这里获得一些反馈。
NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: "test")
let configuration = NEHotspotConfiguration(ssid: "test", passphrase: "testasdasd", isWEP: false)
configuration.joinOnce = true
NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
// error is nil
}
向 Apple 提交雷达后,API 似乎按设计工作。 success/failure案例仅适用于热点配置的应用。
好消息是,我找到了一个合适的解决方法,即使用 CNCopySupportedInterfaces
来验证应用程序是否确实连接到它所说的 SSID。
let ssid = "test"
NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: said)
let configuration = NEHotspotConfiguration(ssid: ssid, passphrase: "testasdasd", isWEP: false)
configuration.joinOnce = true
NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
if let error = error as NSError? {
// failure
} else {
if self.currentSSIDs().first == ssid {
// Real success
} else {
// Failure
}
}
}
使用下面定义的函数:
func currentSSIDs() -> [String] {
guard let interfaceNames = CNCopySupportedInterfaces() as? [String] else {
return []
}
return interfaceNames.flatMap { name in
guard let info = CNCopyCurrentNetworkInfo(name as CFString) as? [String:AnyObject] else {
return nil
}
guard let ssid = info[kCNNetworkInfoKeySSID as String] as? String else {
return nil
}
return ssid
}
}
使用错误密码进行的无效登录仍然是此 API 上的一个问题。如果您已经连接到一个 ssid,您总是会收到 'already associated' 并在通话中设置好或坏的密码。上述逻辑工作的唯一方法是,如果您从现有 ssid 更改为另一个有效的现有 ssid 并向其传递错误密码,则上述逻辑将捕获错误密码。对给定的 ssid 使用 removeConfiguration 似乎没有效果。
当我使用 NEHotspotConfigurationManager
连接到 WiFi 接入点时,我故意使用了无效的密码或 SSID,我没有得到我期望的编程反馈。用户通过警报收到连接失败的反馈,但在提供给 apply
函数的完成块中,error
为 nil,与成功案例相同。这让我无法区分成功案例和失败案例。 NEHotspotConfigurationError
有 .invalidSSID
和 .invalidWPAPassphrase
。我希望这些会被退回。这对我来说就像一个雷达,但我想先在这里获得一些反馈。
NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: "test")
let configuration = NEHotspotConfiguration(ssid: "test", passphrase: "testasdasd", isWEP: false)
configuration.joinOnce = true
NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
// error is nil
}
向 Apple 提交雷达后,API 似乎按设计工作。 success/failure案例仅适用于热点配置的应用。
好消息是,我找到了一个合适的解决方法,即使用 CNCopySupportedInterfaces
来验证应用程序是否确实连接到它所说的 SSID。
let ssid = "test"
NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: said)
let configuration = NEHotspotConfiguration(ssid: ssid, passphrase: "testasdasd", isWEP: false)
configuration.joinOnce = true
NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
if let error = error as NSError? {
// failure
} else {
if self.currentSSIDs().first == ssid {
// Real success
} else {
// Failure
}
}
}
使用下面定义的函数:
func currentSSIDs() -> [String] {
guard let interfaceNames = CNCopySupportedInterfaces() as? [String] else {
return []
}
return interfaceNames.flatMap { name in
guard let info = CNCopyCurrentNetworkInfo(name as CFString) as? [String:AnyObject] else {
return nil
}
guard let ssid = info[kCNNetworkInfoKeySSID as String] as? String else {
return nil
}
return ssid
}
}
使用错误密码进行的无效登录仍然是此 API 上的一个问题。如果您已经连接到一个 ssid,您总是会收到 'already associated' 并在通话中设置好或坏的密码。上述逻辑工作的唯一方法是,如果您从现有 ssid 更改为另一个有效的现有 ssid 并向其传递错误密码,则上述逻辑将捕获错误密码。对给定的 ssid 使用 removeConfiguration 似乎没有效果。