gpt4 book ai didi

swift5 - 如何快速获取当前连接的 Wifi 网络的 SSID | iOS 14?

转载 作者:行者123 更新时间:2023-12-03 23:42:55 25 4
gpt4 key购买 nike

我需要获取当前连接网络的 ssid。我需要它的原因是让我的应用程序能够在连接到特定网络时执行某些功能。现在我似乎无法弄清楚如何获得 ssid?我已经在线阅读并实现了以下内容。
-> 允许的用户位置
-> 登录 Apple 开发帐户并启用 Wifi 访问。
我正在使用的功能是

  func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways || status == .authorizedAlways {
NEHotspotNetwork.fetchCurrent { hotspotNetwork in
if let ssid = hotspotNetwork?.ssid {
print("SSID is \(ssid)")
}
}
}
}
但它给出了以下错误

NEHotspotNetwork nehelper sent invalid result code [5] for Wi-Fi information request


我在这里还缺少什么?我还需要添加什么吗?感谢任何帮助!

最佳答案

我已经整理了获取当前连接的Wifi的SSID的方法。以下是在编写代码之前要遵循的先决条件。
-> 您必须拥有付费开发者帐户。
-> 你必须有一个物理设备
-> 您必须启用 Wifi 授权
-> 允许来自用户的位置使用访问
-> 在 com.apple.developer.networking.wifi-info 中添加 info.plist
然后在您的类(class)中使用此代码来获取 SSID。

import UIKit
import SystemConfiguration.CaptiveNetwork
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

var locationManager = CLLocationManager()
var currentNetworkInfos: Array<NetworkInfo>? {
get {
return SSID.fetchNetworkInfo()
}
}


let ssidLabel:UILabel = {

let lbl = UILabel()
lbl.translatesAutoresizingMaskIntoConstraints = false
return lbl

}()

let bssidLabel:UILabel = {

let lbl = UILabel()
lbl.translatesAutoresizingMaskIntoConstraints = false
return lbl

}()

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .yellow
view.addSubview(ssidLabel)
view.addSubview(bssidLabel)

NSLayoutConstraint.activate([

ssidLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
ssidLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),

bssidLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0),
bssidLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 20),
])

if #available(iOS 13.0, *) {
let status = CLLocationManager.authorizationStatus()
if status == .authorizedWhenInUse {
updateWiFi()
} else {
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
} else {
updateWiFi()
}
}

func updateWiFi() {
print("SSID: \(currentNetworkInfos?.first?.ssid ?? "")")

if let ssid = currentNetworkInfos?.first?.ssid {
ssidLabel.text = "SSID: \(ssid)"
}

if let bssid = currentNetworkInfos?.first?.bssid {
bssidLabel.text = "BSSID: \(bssid)"
}

}

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
updateWiFi()
}
}

}

public class SSID {
class func fetchNetworkInfo() -> [NetworkInfo]? {
if let interfaces: NSArray = CNCopySupportedInterfaces() {
var networkInfos = [NetworkInfo]()
for interface in interfaces {
let interfaceName = interface as! String
var networkInfo = NetworkInfo(interface: interfaceName,
success: false,
ssid: nil,
bssid: nil)
if let dict = CNCopyCurrentNetworkInfo(interfaceName as CFString) as NSDictionary? {
networkInfo.success = true
networkInfo.ssid = dict[kCNNetworkInfoKeySSID as String] as? String
networkInfo.bssid = dict[kCNNetworkInfoKeyBSSID as String] as? String
}
networkInfos.append(networkInfo)
}
return networkInfos
}
return nil
}
}

struct NetworkInfo {
var interface: String
var success: Bool = false
var ssid: String?
var bssid: String?
}

关于swift5 - 如何快速获取当前连接的 Wifi 网络的 SSID | iOS 14?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64676100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com