iOS - 如何使用私有/第三方库以SSID和密码的形式以编程方式连接到WiFi网络

时间:2016-03-30 08:10:20

标签: ios wifi

我正在尝试复制我在iOS上创建的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。 SSID和密码可以是硬编码的或者可以由用户输入。我正在通过互联网研究如何在iOS上完成这项工作,但是,似乎这种行为非常气馁,而且使用公共/文档化的图书馆无法做到这一点。 t让App Store拒绝您的申请。

问题是我将亲自使用此应用程序,并且我不打算将其提交到App Store,以便我可以使用外部库。如果我的朋友想要使用它,我可以导出企业ipa并给他们如何安装它的说明。

经过搜索,似乎MobileWifi.framework是一个很好的候选人。但是,在使用SSID和密码的情况下,似乎没有使用此库连接到WiFi网络的简单方法。

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

9 个答案:

答案 0 :(得分:42)

使用iOS 11,Apple提供了公共API,您可以使用它以编程方式加入WiFi网络,而无需离开您的应用。

您需要使用的课程称为NEHotspotConfiguration

要使用它,您需要在应用功能(Adding Capabilities)中启用Hotspot功能。快速工作的例子:

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

[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];

这将提示用户加入“SSID-Name”WiFi网络。在用户离开应用程序之前,它将保持与WiFi的连接。

这不适用于使用实际设备运行此代码所需的模拟器,以使其正常工作。

此处有更多信息: https://developer.apple.com/documentation/networkextension/nehotspotconfiguration

答案 1 :(得分:18)

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

在App Id配置服务上启用热点

Enable Hotspot on App Id configure services

启用热点配置后

After Enable Hotspot Configuration

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

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")
    }
}

答案 2 :(得分:17)

与您在此处和其他地方看到的相反,您可以这样做。对于普通用户来说,很难做到足够漂亮,但如果不是必须的话那么它很容易编码。它是企业管理员的事情,但任何人都可以做到。查找"连接配置文件。"例如,Comcast在他们的iOS应用程序中为您设置热点。

基本上,它是一个XML文档,您可以通过Safari或Mail获取设备。它有很多技巧,并且用户体验并不是很好,但我可以确认它在iOS 10中有效,并且它不需要越狱。您使用配置程序生成XML,我建议this thread提供服务(但是人们找不到它,因为它不是专门针对WiFi),this blog用于查询它的安装非常令人惊讶,但确实有效。

I've answered this question很多次,但要么没有足够的代表,要么太愚蠢,无法弄清楚如何将问题复制成副本,以便更容易找到更好的答案。

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

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

答案 3 :(得分:7)

简短回答,不。

答案很长:)

这个问题被多次询问:

最有趣的答案似乎是指向GitHub项目的第一个链接:wifiAssociate。然而,第三个链接中的某些人解释说这不再适用于iOS8,因此您可能很难让它运行 此外,iDevice必须越狱。

答案 4 :(得分:5)

我的两分钱: 如果你有:

  

架构i386的未定义符号:
  " _OBJC_CLASS _ $ _ NEHotspotConfigurationManager",引自:         WiFiViewController.o中的objc-class-ref" _OBJC_CLASS _ $ _ NEHotspotConfiguration",引自:         WiFiViewController.o中的objc-class-ref ld:找不到架构i386的符号

简单地说它在模拟器下不起作用。

在真实设备上它会编译。 所以使用:

class func startHotspotHelperStuff(){

        if TARGET_IPHONE_SIMULATOR == 0 {

            if #available(iOS 11.0, *) {
                let configuration = NEHotspotConfiguration(ssid: "ss")
                configuration.joinOnce = true
                NEHotspotConfigurationManager.shared.apply(configuration, completionHandler: { (err: Error?) in
                    print(err)
                })
            } else {
                // Fallback on earlier versions
            }
        }// if TARGET_IPHONE_SIMULATOR == 0
    }

答案 5 :(得分:3)

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

夫特

var configuration = NEHotspotConfiguration.init(ssid: "wifi name", passphrase: "wifi password", isWEP: false)
        configuration.joinOnce = true

        NEHotspotConfigurationManager.shared.apply(configuration) { (error) in
            if error != nil {
                //an error accured
                print(error?.localizedDescription)
            }
            else {
                //success
            }
        }

答案 6 :(得分:3)

确保两个Network Extensions&热点配置在功能中打开。

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
            }
    }

答案 7 :(得分:0)

您可以使用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)
    }

答案 8 :(得分:0)

我不确定这是否会对任何人有帮助,但是如果我没有记错的话,那么苹果会从版本9开始在iOS中放入Wifi QR代码。已经有一段时间了。

您可以转到此处:https://qifi.org

输入您的SSID和密码。打印出QR码或将其保留在屏幕上。使用相机应用将iPhone指向QR码。您会收到一个通知栏,如果您按,将即时设置您的WIFI连接。

此“应该”可在Android上使用,但我尚未对其进行测试。它可以在iOS上使用。

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

相关问题