返回
告别iOS 13局限,轻松获取WiFi SSID和BSSID!
IOS
2024-01-26 19:59:33
一直在手机上使用WiFi连接网络,却对WiFi的信息一无所知?
在不久前,苹果发送了一封邮件,通知开发者,在iOS 13中,CNCopyCurrentNetworkInfo接口将不再返回WiFi SSID和BSSID的信息。这一消息对于物联网相关应用程序来说是一个不小的挑战,因为这些应用程序通常需要获取WiFi SSID和BSSID信息才能正常工作。
不过,苹果也在邮件中提供了解决方案。他们表示,如果应用程序已经打开了位置权限,则仍然可以获取WiFi SSID和BSSID信息。因此,对于那些需要获取WiFi SSID和BSSID信息的物联网应用程序,只需在用户允许的前提下,先获取用户的位置权限,然后就可以通过CNCopyCurrentNetworkInfo接口获取WiFi SSID和BSSID的信息了。
下面是一个示例,演示了如何在Swift中获取WiFi SSID和BSSID的信息:
import CoreLocation
import SystemConfiguration.CaptiveNetwork
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
getWiFiInfo()
}
}
func getWiFiInfo() {
guard let interfaces = CNCopySupportedInterfaces() as? [String] else {
return
}
for interface in interfaces {
guard let info = CNCopyCurrentNetworkInfo(interfaceName: interface) as? [String: AnyObject] else {
continue
}
guard let ssid = info[kCNNetworkInfoKeySSID as String] as? String else {
continue
}
guard let bssid = info[kCNNetworkInfoKeyBSSID as String] as? String else {
continue
}
print("SSID: \(ssid)")
print("BSSID: \(bssid)")
}
}
}
在这个示例中,我们首先获取了用户的位置权限,然后通过CNCopySupportedInterfaces()函数获取了所有支持的网络接口。接下来,我们遍历这些网络接口,并通过CNCopyCurrentNetworkInfo()函数获取每个网络接口的当前网络信息。最后,我们从网络信息中提取出WiFi SSID和BSSID的信息,并将其打印到控制台。
需要注意的是,如果应用程序没有打开位置权限,则无法获取WiFi SSID和BSSID的信息。因此,在使用CNCopyCurrentNetworkInfo()函数之前,一定要确保应用程序已经打开了位置权限。