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

Raz*_*riz 38 wifi ios

我正在尝试复制我对iOS所做的现有Android应用程序.在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络.SSID和密码可以是硬编码的或者可以由用户输入.我正在通过互联网研究如何在iOS上完成这项工作,但是,似乎这种行为非常气馁,并且没有办法使用公共/文档库来实现这一点,这些库不会让您的应用程序被拒绝App Store.

问题是我将亲自使用这个应用程序,我不打算将它提交到App Store,所以如果我使用外部库也没关系.如果我的朋友想要使用它,我可以导出企业ipa并给他们如何安装它的说明.

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

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

Ent*_*uan 47

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

您需要使用的类被调用NEHotspotConfiguration.

要使用它,您需要Hotspot在应用功能(添加功能)中启用该功能.快速工作示例:

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

[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 不要忘记导入NetworkExtension (7认同)
  • 这需要苹果批准吗?有什么权利吗? (2认同)

Eli*_*lum 18

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

基本上,它是一个XML文档,您可以通过Safari或Mail获取设备.它有很多技巧,用户体验不是很好,但我可以确认它在iOS 10中有效并且不需要越狱.您使用Configurator生成XML,我建议使用此线程来提供它(但是人们没有找到它,因为它不是特别关于WiFi),而且这个博客用于查询是否安装了哪个令人惊讶的非常重要但确实有效.

我已多次回答这个问题,但要么没有足够的代表,要么太愚蠢,无法弄清楚如何将问题复制成副本,以便更容易找到更好的答案.

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

var config = new NEHotspotConfiguration(Ssid, Pw, false);
config.JoinOnce = false;
Run Code Online (Sandbox Code Playgroud)


Vir*_*tel 18

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

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

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

启用热点配置后

启用热点配置后

仅适用于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")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您在SSID中有错别字,则连接失败并且没有错误,它仍会显示“已连接”。 (5认同)
  • 有没有办法知道 SSID 是否在 iPhone 的范围内? (2认同)

fil*_*ton 8

简短的回答,没有.


答案很长:)

这个问题被多次询问:

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


小智 7

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

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
            }
    }
Run Code Online (Sandbox Code Playgroud)


ing*_*nti 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
    }
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

57380 次

最近记录:

6 年,5 月 前