发布于 5年前

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的功能就不能使用了。

©2020 edoou.com   京ICP备16001874号-3