如何在iOS中获取所有可用的WiFi网络名称列表

16

我需要创建一个应用程序,在iPhone上获取所有可用wifi网络的名称和信息列表,当用户点击某些网络时,他们应该连接到它。我可以这样做吗?如何实现?


1
这是可能的答案:https://dev59.com/nlkR5IYBdhLWcg3w4hDN#40683210 - Faysal Ahmed
你能给出任何 NetworkExtension 实现的例子吗? - Akash
https://dev59.com/fG435IYBdhLWcg3w0ThP - Rashed
@ Md Rashed Pervez,它只显示当前连接的网络,但我需要所有可用的网络名称。 - Akash
1
可能是重复的问题:iPhone获取所有SSID列表而不使用私有库 - Senseful
你有得到完美的答案吗?我正在寻找相同的功能。请帮忙。 - Vikas
3个回答

10

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

输出 - (我所连接的网络名称)

在此输入图片描述

为了测试这个,你需要一个连接到你的电脑的物理设备(iPhone)。


4
是的,我能看到当前连接的网络,但我想要查看所有可用网络列表。 - Akash
你有没有任何示例可以展示如何做到这一点?我不知道如何使用它。 - Akash
1
到目前为止,我已经与您分享了我的工作。所有示例将显示您连接的名称,而不是WiFi列表。您可以使用网络可达性来显示iPhone的设置页面-然后用户将决定在哪里连接(用户将在那里看到所有可用的WiFi列表)。如果您发现我的答案有帮助,可以接受我的答案:)。谢谢。 - Rashed

2
通过一些研究,我发现:
iOS无法扫描所有附近的SSID。我们只能获取当前连接的wifi SSID。如果我们使用任何私有库来实现这个功能,应用将被苹果拒绝。 以下是一些有用的链接 -

您可以通过以下方法获取已连接的wifi SSID
Swift (3 and 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";
}

那么真的没有办法扫描所有附近的SSID吗?在iOS中我们只能获取当前连接的WiFi SSID吗? - shaqir saiyed
答案错误。您可以获取附近的网络。 - Alexander Volkov
Alexander Volkov,请引用一些文档或编写答案,而不是评论,说明如何做到这一点。仅仅反驳某人而不支持你的论点是没有帮助的。 - David Rector

1

只有当用户导航到设置中的Wi-Fi页面时,NEHotspotNetwork才会返回网络列表。更多详情请参见https://dev59.com/Amkw5IYBdhLWcg3wu9Fg#52473480。 - Samball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接