如何在iOS中使用swift获取所有wifi网络名称列表

时间:2018-03-28 04:05:49

标签: ios swift xcode9

我有一个简单的问题,但我不知道如何实现这一点。我需要创建一个应用程序,当用户点击某个网络iphone必须连接到该网络时,可以获取所有可用的wifi网络名称和信息列表。我能这样做吗?怎么样?

3 个答案:

答案 0 :(得分:3)

无法获得所有可用的wifi网络名称和信息。 但是只能获得您当前所连接的网络的SSIDSSID只是网络名称的技术术语)。

此课程仅显示您所连接的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 - (我所连接的网络名称)

enter image description here

要对此进行测试,您需要连接到电脑的物理设备(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返回热点列表。