Swift在 iOS 13上获取Wi-Fi SSID(服务集标识)
Apple在iOS 13进行了很多更改,以保护使用iOS用户的隐私。其中包括了网络上的更改,这样会导致我们的应用程序有些服务不能使用。
CNCopyCurrentNetworkInfo是用来获取Wi-Fi信息的。可以通过下面示例的方法获取Wi-Fi的SSID:
import Foundation
import SystemConfiguration.CaptiveNetwork
func getWiFiSsid() -> String? {
var ssid: String?
if let interfaces = CNCopySupportedInterfaces() as NSArray? {
for interface in interfaces {
if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
break
}
}
}
return ssid
}
在iOS 13之前,我们只要能够连接上wifi,可以获取wifi信息,我们就可以活到已连接的Wi-Fi SSID。
而从iOS 13开始,只有在下面三种情况下可以,获取WIFI的SSID:
- 应用被授权获取位置信息
- 应用有启动VPN的配置
- 如果是使用NEHotspotConfiguration的网络应用,则需要苹果的额外批准
如果不是这三种情况,iOS 13以上的版本,CNCopyCurrentNetworkInfo就会返回nil。这样应用使用了 Wi-Fi SSID的功能就不能使用了。