iOS - Как программно подключиться к сети WiFi, используя SSID и пароль
Я пытаюсь скопировать существующее приложение Android, которое я сделал, для iOS. В моем приложении я должен иметь возможность подключаться к сети WiFi, используя SSID и пароль. SSID и пароль могут быть жестко закодированы или введены пользователем. Я пробирался через Интернет, чтобы исследовать, как это можно сделать на iOS, однако, кажется, что такое поведение крайне не рекомендуется, и что нет никакого способа сделать это, используя публичные/документированные библиотеки, которые не будут отклонены вашим приложением App Store.
Дело в том, что я буду использовать это приложение лично, и я не планирую отправлять его в App Store, так что все в порядке, если я использую внешние библиотеки. Если мои друзья захотят его использовать, я могу экспортировать корпоративный ipa и дать им инструкции по его установке.
После поиска показалось, что MobileWifi.framework был хорошим кандидатом. Тем не менее, не похоже, что существует простой способ использования этой библиотеки для подключения к сети WiFi с учетом SSID и пароля.
Есть кто-нибудь, кто успешно пытался подключиться к сети Wi-Fi, используя SSID и пароль?
Ответы
Ответ 1
В iOS 11 Apple предоставил общедоступный API, который вы можете использовать для программного присоединения к сети WiFi, не покидая приложения.
Класс, который вам нужно использовать, называется NEHotspotConfiguration
.
Чтобы использовать его, вам нужно включить возможность Hotspot
в возможностях вашего приложения (Добавление возможностей). Быстрый рабочий пример:
NEHotspotConfiguration *configuration = [[NEHotspotConfiguration
alloc] initWithSSID:@"SSID-Name"];
configuration.joinOnce = YES;
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];
Это побудит пользователя присоединиться к сети WiFi "SSID-Name". Он будет оставаться подключенным к Wi-Fi, пока пользователь не покинет приложение.
Это не работает с симулятором, вам нужно запустить этот код с помощью фактического устройства, чтобы он работал.
Дополнительная информация здесь:
https://developer.apple.com/documentation/networkextension/nehotspotconfiguration
Ответ 2
подключайте Wi-Fi-сети в iOS 11. Вы можете подключить Wi-Fi, используя ssid и пароль, как показано ниже.
Включить функцию Hotspot в настройках идентификатора приложения
![Включить Hotspot в настройках конфигурации идентификатора приложения]()
После настройки конфигурации Hotspot
![После настройки конфигурации Hotspot]()
Swift 4.0 Код только для iOS 11:
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")
}
}
Ответ 3
Вопреки тому, что вы видите здесь и в других местах, вы можете сделать это. Трудно сделать достаточно красивым для обычных пользователей, но если не нужно, то это действительно легко кодировать. Это вещь администратора предприятия, но любой может это сделать. Посмотрите "Профили подключения". Comcast делает это в своем приложении для iOS, например, для настройки своих горячих точек.
По сути, это XML-документ, который вы получаете устройству для загрузки через Safari или Mail. Есть много хитростей, и пользовательский опыт не очень хороший, но я могу подтвердить, что он работает в iOS 10 и не требует джейлбрейка. Вы используете Configurator для генерации XML, и я предлагаю этот поток для его обслуживания (но люди не находят его, потому что он не относится конкретно к WiFi), и этот блог для запросов, если он установлен, что на удивление нетривиально, но действительно работает.
Я отвечал на этот вопрос много раз, но либо у меня недостаточно представителей, либо я слишком туп, чтобы понять, как закрыть вопросы как дубликаты, чтобы легче было найти лучшие ответы.
ОБНОВЛЕНИЕ: iOS 11 предоставляет API для этой функции напрямую (наконец-то!). Смотрите NEHotspotConfiguration. Наш код Xamarin С# теперь выглядит так:
var config = new NEHotspotConfiguration(Ssid, Pw, false);
config.JoinOnce = false;
Ответ 4
Короткий ответ, нет.
Длинный ответ:)
Этот вопрос задавали много раз:
Самый интересный ответ, похоже, находится в первой ссылке, которая указывает на проект GitHub: wifiAssociate. Однако некоторые из третьей ссылки объясняют, что это больше не работает с iOS8, поэтому вам может быть трудно запустить его.
Кроме того, iDevice должен быть взломан.
Ответ 5
мои два цента: если вы получили:
Неопределенные символы для архитектуры i386:
"_OBJC_CLASS _ $ _ NEHotspotConfigurationManager", на который ссылаются из: objc-class-ref в WiFiViewController.o "_OBJC_CLASS _ $ _ NEHotspotConfiguration", на который ссылаются на: objc-class-ref в WiFiViewController.o ld: символ не найден для s для
просто он НЕ работает под симулятором.
на реальном устройстве это компилируется. так что используйте:
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
}
Ответ 6
Мы можем программно подключать Wi-Fi-сети после IOS 11. Вы можете подключить Wi-Fi, используя ssid и пароль, как показано ниже.
Свифта
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
}
}
Ответ 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
}
}
Ответ 8
Вы можете подключиться к Wi-Fi с помощью Xcode 9 и быстрого 4
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)
}