首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用iOS 13获取iOS设备中的SSID

如何用iOS 13获取iOS设备中的SSID
EN

Stack Overflow用户
提问于 2020-06-25 15:15:53
回答 1查看 4.1K关注 0票数 3

我有一个目标-C iPhone应用程序,目前我正在使用下面的代码来获得连接的Wifi名称。但是它不能在iOS 13中工作。我如何在iOS 13中获得连接的Wifi?

目前,我正在使用Swift中的以下代码:

代码语言:javascript
复制
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中返回为零,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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上有效。

代码语言:javascript
复制
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中,以获得位置许可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62578677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档