我有一个简单的问题,但我不知道如何实现这一点。我需要创建一个应用程序,当用户点击某个网络iphone必须连接到该网络时,可以获取所有可用的wifi网络名称和信息列表。我能这样做吗?怎么样?
答案 0 :(得分:3)
无法获得所有可用的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 - (我所连接的网络名称)
要对此进行测试,您需要连接到电脑的物理设备(iPhone)。
答案 1 :(得分:0)
通过研究,我发现:
在iOS中无法扫描附近的所有SSID。我们只能获取当前已连接的WiFi SSID。
如果我们以某种方式对任何私有库执行此操作,则Apple将拒绝该App。
我想分享的一些有用的链接-
您可以通过以下方法连接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";
}
答案 2 :(得分:0)
是的。您需要在https://developer.apple.com/contact/network-extension填写调查表,然后才能使用NEHotspotHelper返回热点列表。