iOS-如何在给定SSID和密码的情况下以编程方式连接到WiFi网络
我正在尝试复制我在iOS上制作的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。SSID和密码可以硬编码,也可以由用户输入。我曾在互联网上研究如何在iOS上实现这一点,但是,似乎这种行为非常不受欢迎,而且使用公共/文档库无法实现这一点,而这些库不会让你的应用程序被应用商店拒绝 问题是我将亲自使用这个应用程序,我不打算将它提交到应用商店,所以如果我使用外部库也没关系。如果我的朋友想使用它,我可以导出一个企业ipa,并告诉他们如何安装它 经过搜索,这似乎是一个很好的候选人。然而,在给定SSID和密码的情况下,似乎没有一种简单的方法可以使用此库连接到WiFi网络 有没有人在给定SSID和密码的情况下成功尝试连接到Wifi网络?简短回答,没有iOS-如何在给定SSID和密码的情况下以编程方式连接到WiFi网络,ios,wifi,Ios,Wifi,我正在尝试复制我在iOS上制作的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。SSID和密码可以硬编码,也可以由用户输入。我曾在互联网上研究如何在iOS上实现这一点,但是,似乎这种行为非常不受欢迎,而且使用公共/文档库无法实现这一点,而这些库不会让你的应用程序被应用商店拒绝 问题是我将亲自使用这个应用程序,我不打算将它提交到应用商店,所以如果我使用外部库也没关系。如果我的朋友想使用它,我可以导出一个企业ipa,并告诉他们如何安装它 经过搜
答案很长:) 这个问题被问了很多次:
此外,该设备必须是越狱的。与您在这里和其他地方看到的相反,您可以这样做。对于普通用户来说,很难做到足够漂亮,但如果不一定要做到,那么编写代码就很容易了。这是一个企业管理的事情,但任何人都可以做到。查找“连接配置文件”。例如,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
}
}