it-swarm.com.de

iOS - Programmgesteuerte Verbindung mit einem WLAN-Netzwerk unter Verwendung der SSID und des Kennworts mithilfe einer privaten/Drittanbieter-Bibliothek

Ich versuche, eine vorhandene Android-Anwendung, die ich auf iOS erstellt habe, zu replizieren. In meiner Anwendung sollte ich über die SSID und das Kennwort eine Verbindung zu einem WLAN-Netzwerk herstellen können. Die SSID und das Passwort können fest codiert sein oder können vom Benutzer eingegeben werden. Ich habe über das Internet nach Möglichkeiten gesucht, wie dies unter iOS möglich ist. Allerdings scheint dieses Verhalten äußerst entmutigt zu sein und es gibt keine Möglichkeit, öffentliche/dokumentierte Bibliotheken zu verwenden, durch die Ihre Anwendung nicht abgelehnt wird der App Store.

Die Sache ist, dass ich diese Anwendung persönlich benutze und ich habe nicht vor, sie im App Store einzureichen. Es ist also in Ordnung, wenn ich externe Bibliotheken verwende. Wenn meine Freunde es verwenden möchten, könnte ich eine Unternehmens-IPA exportieren und ihnen Anweisungen zur Installation geben.

Bei der Suche schien es, dass MobileWifi.framework ein guter Kandidat war. Es scheint jedoch nicht, dass es eine einfache Möglichkeit gibt, diese Bibliothek zu verwenden, um eine Verbindung zu einem WLAN-Netzwerk herzustellen, wenn Sie die SSID und das Kennwort verwenden.

Gibt es jemanden, der unter Verwendung der SSID und des Kennworts erfolgreich versucht hat, eine Verbindung zu einem WLAN-Netzwerk herzustellen?

31
Razgriz

Mit iOS 11 stellt Apple eine öffentliche API zur Verfügung, mit der Sie sich programmgesteuert einem WLAN-Netzwerk anschließen können, ohne die App zu verlassen.

Die Klasse, die Sie verwenden müssen, heißt NEHotspotConfiguration.

Um es verwenden zu können, müssen Sie die Hotspot-Funktion in Ihren App-Funktionen aktivieren ( Hinzufügen von Funktionen ). Schnelles Arbeitsbeispiel:

NEHotspotConfiguration *configuration = [[NEHotspotConfiguration
 alloc] initWithSSID:@“SSID-Name”];
configuration.joinOnce = YES;

[[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil];

Dadurch wird der Benutzer aufgefordert, dem WLAN-Netzwerk "SSID-Name" beizutreten. Es bleibt mit dem WLAN verbunden, bis der Benutzer die App verlässt.

Dies funktioniert nicht mit dem Simulator. Sie müssen diesen Code mit einem tatsächlichen Gerät ausführen, damit er funktioniert.

Weitere Informationen hier: https://developer.Apple.com/documentation/networkextension/nehotspotconfiguration

38
Enthouan

Im Gegensatz zu dem, was Sie hier und an anderen Orten sehen, können Sie es tun. Es ist schwierig, für normale Benutzer ziemlich hübsch zu sein, aber wenn dies nicht der Fall sein muss, ist das Codieren sehr einfach. Es ist eine Enterprise-Admin-Sache, aber jeder kann es. Suchen Sie nach "Verbindungsprofilen". Comcast führt dies in seiner iOS-App aus, um beispielsweise die Hotspots für Sie einzurichten.

Im Grunde handelt es sich um ein XML-Dokument, das das Gerät über Safari oder Mail einlesen kann. Es gibt viele Tricks und die Benutzererfahrung ist nicht so toll, aber ich kann bestätigen, dass es mit iOS 10 funktioniert und es keinen Jailbreak erfordert. Sie verwenden Configurator zum Generieren der XML-Datei, und ich schlage diesen Thread zum Servieren vor (aber die Benutzer finden es nicht, weil es nicht speziell um WLAN geht) und dieses Blog zum Abfragen von es ist installiert, was überraschend nicht trivial ist, aber tatsächlich funktioniert.

Ich habe diese Frage beantwortet viele Male, aber entweder haben Sie nicht genügend Wiederholungen oder sind zu dumm, um herauszufinden, wie Sie Fragen als Duplikate schließen, damit bessere Antworten leichter gefunden werden können.

UPDATE: iOS 11 bietet APIs für diese Funktionalität direkt (endlich!). Siehe NEHotspotConfiguration . Unser Xamarin C # -Code sieht jetzt so aus:

var config = new NEHotspotConfiguration(Ssid, Pw, false);
config.JoinOnce = false;
16
Eliot Gillum

wLAN-Netzwerke in iOS 11 verbinden. Sie können WLAN wie folgt mit SSID und Kennwort verbinden.

Hotspot für App-ID-Konfigurationsdienste aktivieren

 Enable Hotspot on App Id configure services

Nach der Aktivierung der Hotspot-Konfiguration

 After Enable Hotspot Configuration

Swift 4.0 Code nur für 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")
    }
}
16
Viraj Patel

Kurze Antwort, nein.


Lange Antwort :)

Diese Frage wurde oft gestellt:

Die interessanteste Antwort scheint im ersten Link zu sein, der auf ein GitHub-Projekt verweist: wifiAssociate . Einige im dritten Link erklären jedoch, dass dies mit iOS8 nicht mehr funktioniert. Daher kann es schwierig sein, das Programm zum Laufen zu bringen.
Darüber hinaus muss das iDevice im Jailbreak sein.

7
filaton

meine zwei Cents: wenn Sie: Undefinierte Symbole für die Architektur i386: "_OBJC_CLASS _ $ _ NEHotspotConfigurationManager", referenziert von: objc-class-ref in WiFiViewController.o "_OBJC_CLASS _ $ _ NEHotspotConfiguration", referenziert von: objc-class-ref in WiFiViewController.o ld: Symbol (e) für Architektur i386 nicht gefunden

es funktioniert einfach NICHT unter dem Simulator.

auf echtem Gerät kompiliert es . Verwenden Sie also:

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

Wir können WLAN-Netzwerke nach IOS 11 programmatisch verbinden. Sie können WLAN wie folgt mit SSID und Kennwort verbinden.

Schnell

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

Stellen Sie sicher, dass sowohl Netzwerkerweiterungen als auch Hotspot-Konfiguration in den Funktionen aktiviert sind.

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

Mit Xcode 9 und Swift 4 können Sie eine WLAN-Verbindung herstellen

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