iOS-如何在给定SSID和密码的情况下以编程方式连接到WiFi网络

iOS-如何在给定SSID和密码的情况下以编程方式连接到WiFi网络,ios,wifi,Ios,Wifi,我正在尝试复制我在iOS上制作的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。SSID和密码可以硬编码,也可以由用户输入。我曾在互联网上研究如何在iOS上实现这一点,但是,似乎这种行为非常不受欢迎,而且使用公共/文档库无法实现这一点,而这些库不会让你的应用程序被应用商店拒绝 问题是我将亲自使用这个应用程序,我不打算将它提交到应用商店,所以如果我使用外部库也没关系。如果我的朋友想使用它,我可以导出一个企业ipa,并告诉他们如何安装它 经过搜

我正在尝试复制我在iOS上制作的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。SSID和密码可以硬编码,也可以由用户输入。我曾在互联网上研究如何在iOS上实现这一点,但是,似乎这种行为非常不受欢迎,而且使用公共/文档库无法实现这一点,而这些库不会让你的应用程序被应用商店拒绝

问题是我将亲自使用这个应用程序,我不打算将它提交到应用商店,所以如果我使用外部库也没关系。如果我的朋友想使用它,我可以导出一个企业ipa,并告诉他们如何安装它

经过搜索,这似乎是一个很好的候选人。然而,在给定SSID和密码的情况下,似乎没有一种简单的方法可以使用此库连接到WiFi网络

有没有人在给定SSID和密码的情况下成功尝试连接到Wifi网络?

简短回答,没有


答案很长:)

这个问题被问了很多次:

最有趣的答案似乎出现在指向GitHub项目的第一个链接中:。然而,第三个链接中的一些人解释说,这在iOS8中不再起作用,因此您可能很难让它运行。

此外,该设备必须是越狱的。

与您在这里和其他地方看到的相反,您可以这样做。对于普通用户来说,很难做到足够漂亮,但如果不一定要做到,那么编写代码就很容易了。这是一个企业管理的事情,但任何人都可以做到。查找“连接配置文件”。例如,Comcast会在其iOS应用程序中为您设置热点

基本上,它是一个XML文档,您可以通过Safari或Mail让设备接收。它有很多技巧,用户体验也不是很好,但我可以确认它在iOS 10中工作,并且不需要越狱。您可以使用Configurator生成XML,我建议您提供XML服务(但人们找不到它,因为它不是专门针对WiFi的),以及查询是否安装了它,这非常重要,但确实有效

很多次,但要么是没有足够的代表性,要么是我太笨了,不知道如何将问题重复,以便更容易找到更好的答案

更新:iOS 11直接(最后!)为该功能提供了API。看见我们的Xamarin C#代码现在看起来像:

var config = new NEHotspotConfiguration(Ssid, Pw, false);
config.JoinOnce = false;

在iOS 11中,苹果提供了公共API,您可以使用该API以编程方式加入WiFi网络,而无需离开应用程序

您需要使用的类称为
nehospotconfiguration

要使用它,您需要在应用程序功能()中启用
热点
功能。快速工作示例:

NEHotspotConfiguration *configuration = [[NEHotspotConfiguration
 alloc] initWithSSID:@“SSID-Name”];
configuration.joinOnce = YES;

[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];
这将提示用户加入“SSID名称”WiFi网络。它将一直连接到WiFi,直到用户离开应用程序

这不适用于模拟器,您需要使用实际设备运行此代码才能使其工作

更多信息请点击此处:

我们可以在IOS 11之后以编程方式连接wifi网络。您可以使用ssid和密码连接wifi,如下所示

迅捷的


您可以使用Xcode 9和swift 4连接到wifi

let WiFiConfig = NEHotspotConfiguration(ssid: "Mayur1",
                                                  passphrase: "123456789",
                                                  isWEP: false)

    WiFiConfig.joinOnce = false
    NEHotspotConfigurationManager.shared.apply(WiFiConfig) { error in
        // Handle error or success
        print(error?.localizedDescription)
    }
我的两分钱: 如果你有:

架构i386的未定义符号:
“_OBJC_CLASS_$_nehostpointconfigurationmanager”,引用自: WiFiViewController.o“\u objc\u class\uu$\u nehospotconfiguration”中的objc类引用,引用自: WiFiViewController.o ld中的objc类引用:未找到架构i386的符号

简单地说,它不能在模拟器下工作

在实际设备上,它确实可以编译。 因此,请使用:


在iOS 11中连接wifi网络。您可以使用ssid和密码连接wifi,如下所示

在应用程序Id上启用热点配置服务

启用热点配置后

仅适用于iOS 11的Swift 4.0代码:

import NetworkExtension


确保网络扩展和热点配置都在功能中打开

let wiFiConfig = NEHotspotConfiguration(ssid: YourSSID, 
    passphrase: YourPassword, isWEP: false) 
    wiFiConfig.joinOnce = false /*set to 'true' if you only want to join 
                                the network while the user is within the 
                                app, then have it disconnect when user 
                                leaves your app*/
    NEHotspotConfigurationManager.shared.apply(wiFiConfig) { error in
        if error != nil {
                //an error occurred
                print(error?.localizedDescription)
            }
            else {
                //success
            }
    }

我不确定这是否对任何人都有帮助,但如果我没弄错的话,苹果公司在iOS上安装了一个Wifi二维码,从第9版开始。已经有一段时间了

你可以到这里:

输入您的SSID和密码。打印二维码或将其保留在屏幕上。使用摄像头应用程序将iPhone指向二维码。您将得到一个通知栏,如果您按下,将在飞行中设置您的WIFI连接

这“应该”适用于Android,但我还没有测试它。它确实适用于iOS


此解决方案的好处在于,您可以将您的WIFI基础“隐藏”在网络上,人们仍然可以连接到它,这在高流量区域是非常理想的,因为安全原因。

即使使用第三方库也是如此?有没有办法让用户加入网络?比如,弹出对话框加入一个网络,然后用户将在那里手动输入值..?我不知道有任何第三方库这样做可以帮助你。通常,我认为您应该检查Wi-Fi/蜂窝网络的可用性(如上所述),并使用
UIApplicationOpenSettingsURLString
将用户重定向到设置应用程序。这个答案现在已过时。我投票关闭了另一个问题,并保留此问题,因为此问题有更多信息,并且有一个可以接受答案的经过身份验证的用户。您好,Enthouan,我已经安装了iOS 11 SDK并尝试了您的方法,但在尝试使用NEHotspotConfigurationManager或NEHotspotConfiguration时,由于某种原因,我收到了一个链接器错误。即:“_OBJC_CLASS_$_nehospotconfigurationmanager”,引用自:OBJC CLASS re
import NetworkExtension
let configuration = NEHotspotConfiguration.init(ssid: "SSIDname", passphrase: "Password", isWEP: false)
configuration.joinOnce = true

NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
    if error != nil {
        if error?.localizedDescription == "already associated."
        {
            print("Connected")
        }
        else{
            print("No Connected")
        }
    }
    else {
        print("Connected")
    }
}
let wiFiConfig = NEHotspotConfiguration(ssid: YourSSID, 
    passphrase: YourPassword, isWEP: false) 
    wiFiConfig.joinOnce = false /*set to 'true' if you only want to join 
                                the network while the user is within the 
                                app, then have it disconnect when user 
                                leaves your app*/
    NEHotspotConfigurationManager.shared.apply(wiFiConfig) { error in
        if error != nil {
                //an error occurred
                print(error?.localizedDescription)
            }
            else {
                //success
            }
    }