当我使用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
}发布于 2018-02-08 04:22:12
在向苹果公司提交了一份报告后,这个API似乎正在按设计工作。成功/失败案例仅适用于热点配置的应用。
好消息是,我已经找到了一个合适的解决办法,使用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
}
}发布于 2018-08-07 01:09:57
使用错误密码的无效登录仍然是此接口的问题。如果您已经连接到ssid,则在呼叫中放置一个好的或坏的密码时,您总是会得到“已关联”。以上逻辑的唯一工作方式是,如果您将现有ssid更改为另一个有效的现有ssid,并向其传递错误的密码,则上述逻辑将捕获错误的密码。对给定的ssid使用removeConfiguration似乎没有任何效果。
https://stackoverflow.com/questions/48670034
复制相似问题