我正在尝试复制我在iOS上创建的现有Android应用程序。在我的应用程序中,我应该能够在给定SSID和密码的情况下连接到WiFi网络。 SSID和密码可以是硬编码的或者可以由用户输入。我正在通过互联网研究如何在iOS上完成这项工作,但是,似乎这种行为非常气馁,而且使用公共/文档化的图书馆无法做到这一点。 t让App Store拒绝您的申请。
问题是我将亲自使用此应用程序,并且我不打算将其提交到App Store,以便我可以使用外部库。如果我的朋友想要使用它,我可以导出企业ipa并给他们如何安装它的说明。
经过搜索,似乎MobileWifi.framework是一个很好的候选人。但是,在使用SSID和密码的情况下,似乎没有使用此库连接到WiFi网络的简单方法。
是否有人在给定SSID和密码的情况下成功尝试连接到Wifi网络?
答案 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配置服务上启用热点
启用热点配置后
仅适用于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
连接到wifilet 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,出于安全原因,这在高流量区域非常有用。