我有一个目标-C iPhone应用程序,目前我正在使用下面的代码来获得连接的Wifi名称。但是它不能在iOS 13中工作。我如何在iOS 13中获得连接的Wifi?
目前,我正在使用Swift中的以下代码:
public class SSID {
class func fetch() -> String {
var currentSSID = ""
if let interfaces = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
if let interfaceData = unsafeInterfaceData as? [String: AnyObject] {
currentSSID = interfaceData["SSID"] as! String
let BSSID = interfaceData["BSSID"] as! String
let SSIDDATA = interfaceData["SSIDDATA"] as! String
debugPrint("ssid=\(currentSSID), BSSID=\(BSSID), SSIDDATA=\(SSIDDATA)")
}
}
}
return currentSSID
}
}但是这段代码在iOS 13中返回为零,谢谢!
发布于 2020-06-25 15:40:26
使用iOS 14提供的代码,我得到了以下错误:
nehelper sent invalid result code [1] for Wi-Fi information request
搜索这个错误让我找到了这个问题
请求应用程序必须满足下列要求之一: 该应用程序使用核心位置,并获得用户使用位置信息的授权。 该应用程序使用NEHotspotConfiguration API来配置当前的Wi网络。 该应用程序安装了活动VPN配置。 未能满足上述任何一项要求的应用程序将收到以下返回值: 链接到iOS 12或更早版本的应用程序会收到带有伪值的字典。在这种情况下,SSID是Wi(或中国地区的WLAN ),BSSID是00:00:00:00:00:00 :00。 链接到iOS 13或更高版本的应用程序将收到NULL。 重要 要使用这个函数,一个与iOS 12或更高版本的链接的应用程序必须启用Xcode中的Access WiFi Information功能。
我还确认,如果您请求位置许可,这实际上在iOS 14上有效。
import CoreLocation
import UIKit
import SystemConfiguration.CaptiveNetwork
final class ViewController: UIViewController {
var locationManager: CLLocationManager?
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager?.delegate = self
locationManager?.requestAlwaysAuthorization()
}
func getWiFiName() -> 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
}
}
extension ViewController: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways || status == .authorizedAlways {
let ssid = self.getWiFiName()
print("SSID: \(String(describing: ssid))")
}
}
}输出:SSID: YaMomsWiFi
不要忘记包括wifi权限,以及必要的密钥在您的plist中,以获得位置许可。
https://stackoverflow.com/questions/62578677
复制相似问题