web-dev-qa-db-fra.com

iOS - Comment se connecter par programme à un réseau WiFi à l'aide du SSID et du mot de passe à l'aide d'une bibliothèque privée/tierce

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?

31
Razgriz

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

38
Enthouan

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;
16
Eliot Gillum

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

 Enable Hotspot on App Id configure services

Après Activer la configuration du point d'accès

 After Enable Hotspot Configuration

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")
    }
}
16
Viraj Patel

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é.

7
filaton

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
    }
5
ingconti

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
            }
        }
3
Savas Adar

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
            }
    }
2
Anders Chaplin

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)
    }
0
Mayur Rathod