我有简单的问题,但我不知道如何实现这一点。我需要创建一个应用程序,当用户点击某个网络iphone必须连接到该网络时,可以获取所有可用的wifi网络名称和信息列表。我能这样做吗?如何 ?
无法获得所有可用的wifi网络名称和信息。但是,只能获得您当前连接到的网络的SSID
(SSID
只是网络名称的技术术语)。
此课程仅显示您所连接的wifi网络名称 -
import UIKit
import SystemConfiguration.CaptiveNetwork
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad(){
super.viewDidLoad()
let ssid = self.getAllWiFiNameList()
print("SSID: \(ssid)")
}
func getAllWiFiNameList() -> 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
}
}
OUTPUT-(我所连接的网络名称)
要对此进行测试,您需要连接到PC的物理设备(iPhone)。
是的,这是可能的。你需要在https://developer.apple.com/contact/network-extension完成问卷调查,然后你可以使用NEHotspotHelper返回一个热点列表。
通过做一些研究,我发现: 在iOS中无法扫描所有附近的SSID。我们只能获得当前连接的wifi SSID。如果我们以某种方式对任何私人图书馆这样做,App将被Apple拒绝。我想分享一些有用的链接 -
您可以通过以下方法获得连接的WiFi SSID: 斯威夫特(3和4) -
import SystemConfiguration.CaptiveNetwork
func fetchSSIDInfo() -> 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
}
Objective-C -
#import <SystemConfiguration/CaptiveNetwork.h>
+(NSString*)fetchSSIDInfo {
NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
NSDictionary *info;
for (NSString *ifnam in ifs) {
info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) {
return [info objectForKey:@"SSID"];
break;
}
}
return @"No WiFi Available";
}