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

问题描述 投票:4回答:3

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

ios swift xcode9
3个回答
5
投票

无法获得所有可用的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

要对此进行测试,您需要连接到PC的物理设备(iPhone)。


1
投票

是的,这是可能的。你需要在https://developer.apple.com/contact/network-extension完成问卷调查,然后你可以使用NEHotspotHelper返回一个热点列表。


0
投票

通过做一些研究,我发现: 在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";
}
© www.soinside.com 2019 - 2024. All rights reserved.