J'essaie de reproduire une application Android existante que j'ai créée sur iOS. Dans mon application, je devrais pouvoir me connecter à un réseau WiFi en fonction du SSID et du mot de passe. Le SSID et le mot de passe peuvent être codés en dur ou peuvent être entrés par l'utilisateur. Je parcourais Internet pour rechercher comment cela peut être fait sur iOS. Cependant, il semble que ce comportement soit fortement déconseillé et qu’il est impossible de le faire en utilisant des bibliothèques publiques/documentées qui ne verront pas votre application rejetée par l'App Store.
Le truc, c'est que j'utiliserai cette application personnellement et que je ne prévois pas de la soumettre à l'App Store, je peux donc utiliser des bibliothèques externes. Si mes amis veulent l'utiliser, je peux exporter un ipa d'entreprise et leur donner des instructions pour l'installer.
Lors de la recherche, il a semblé que MobileWifi.framework était un bon candidat. Cependant, il ne semble pas qu'il existe un moyen simple d'utiliser cette bibliothèque pour se connecter à un réseau WiFi à l'aide du SSID et du mot de passe.
Quelqu'un a-t-il déjà essayé de se connecter à un réseau Wi-Fi avec le SSID et le mot de passe?
Avec iOS 11, l'API publique fournie par Apple vous permet de rejoindre par programmation un réseau WiFi sans quitter votre application.
La classe que vous devez utiliser s'appelle NEHotspotConfiguration
.
Pour l'utiliser, vous devez activer la fonctionnalité Hotspot
dans vos fonctionnalités d'application ( Ajout de fonctionnalités ). Exemple de travail rapide:
NEHotspotConfiguration *configuration = [[NEHotspotConfiguration
alloc] initWithSSID:@“SSID-Name”];
configuration.joinOnce = YES;
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];
Cela invitera l'utilisateur à rejoindre le réseau WiFi «SSID-Name». Il restera connecté au WiFi jusqu'à ce que l'utilisateur quitte l'application.
Cela ne fonctionne pas avec le simulateur, vous devez exécuter ce code avec un périphérique réel pour le faire fonctionner.
Plus d'informations ici: https://developer.Apple.com/documentation/networkextension/nehotspotconfiguration
Contrairement à ce que vous voyez ici et à d’autres endroits, vous pouvez le faire. Il est difficile de faire assez joli pour les utilisateurs normaux, mais si ce n’est pas nécessairement le cas, il est très facile de coder. C'est une affaire d'administrateur d'entreprise, mais n'importe qui peut le faire. Recherchez "Profils de connexion". Comcast fait cela dans son application iOS pour configurer ses hotspots pour vous, par exemple.
Il s’agit d’un document XML que l’appareil doit ingérer via Safari ou Mail. Il y a beaucoup de trucs et l'expérience utilisateur n'est pas géniale, mais je peux confirmer que cela fonctionne dans iOS 10 et que cela ne nécessite pas de jailbreak. Vous utilisez Configurator pour générer le XML, et je suggère ce fil pour le servir (mais les gens ne le trouvent pas car ce n'est pas spécifiquement Wi-Fi), et ce blog pour demander si il est installé, ce qui est étonnamment non trivial mais fonctionne bien.
J'ai répondu à cette question plusieurs fois, mais soit vous n'avez pas assez de représentants, soit je suis trop bête pour comprendre comment fermer les questions en double afin de trouver de meilleures réponses plus facilement.
UPDATE: iOS 11 fournit directement des API pour cette fonctionnalité (enfin!). Voir NEHotspotConfiguration . Notre code Xamarin C # ressemble maintenant à:
var config = new NEHotspotConfiguration(Ssid, Pw, false);
config.JoinOnce = false;
connecter des réseaux wifi dans iOS 11. Vous pouvez vous connecter au wifi en utilisant ssid et mot de passe comme suit.
Activer Hotspot sur les identifiants d'application, configurez les services
Après Activer la configuration du point d'accès
Swift 4.0 Code pour iOS 11 uniquement:
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")
}
}
Réponse courte, non.
Longue réponse :)
Cette question a été posée à plusieurs reprises:
La réponse la plus intéressante semble être dans le premier lien qui pointe vers un projet GitHub: wifiAssociate . Cependant, certaines personnes du troisième lien expliquent que cela ne fonctionne plus avec iOS8 et que vous pourriez donc avoir du mal à le faire fonctionner.
En outre, le iDevice doit être jailbreaké.
mes deux cents: si vous avez: Symboles non définis pour l'architecture i386: "_OBJC_CLASS _ $ _ NEHotspotConfigurationManager", référencé depuis: objc-class-ref dans WiFiViewController.o "_OBJC_CLASS _ $ _ NEHotspotConfiguration", référencé depuis: objc-class-ref dans WiFiViewController.o ld: symbole (s) non trouvé (s) pour l'architecture i386
tout simplement cela ne fonctionne pas sous simulateur.
sur un périphérique réel, il compile . alors utilisez:
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
}
Nous pouvons connecter par programmation des réseaux wifi après IOS 11. Vous pouvez vous connecter au réseau wifi en utilisant les identifiants SSID et mot de passe comme suit.
Rapide
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
}
}
Assurez-vous que la configuration des extensions réseau et des points d'accès est activée dans les fonctionnalités.
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 accured
print(error?.localizedDescription)
}
else {
//success
}
}
Vous pouvez vous connecter au wifi avec Xcode 9 et Swift 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)
}