web-dev-qa-db-ja.com

iOS-SSIDとパスワードを指定してWiFiネットワークにプログラムで接続する方法

IOSに作成した既存のAndroidアプリケーションを複製しようとしています。私のアプリケーションでは、SSIDとパスワードを指定してWiFiネットワークに接続できるはずです。 SSIDとパスワードはハードコーディングするか、ユーザーが入力できます。私はインターネット上でこれをiOSでどのように行うことができるかを調べていましたが、この動作は非常に推奨されておらず、アプリケーションが拒否されないパブリック/ドキュメント化されたライブラリを使用してこれを行う方法はないようですApp Store。

問題は、このアプリケーションを個人的に使用することであり、App Storeに提出する予定はないので、外部ライブラリを使用してもかまいません。友人がそれを使用したい場合、エンタープライズIPAをエクスポートし、インストール方法を指示できます。

検索すると、 MobileWifi.framework が適切な候補であるように見えました。ただし、SSIDとパスワードを指定してこのライブラリを使用してWiFiネットワークに接続する簡単な方法はないと思われます。

SSIDとパスワードを指定してWifiネットワークへの接続に成功した人はいますか?

35
Razgriz

IOS 11では、Appleが提供するパブリックAPIを使用して、アプリを離れることなくプログラムでWiFiネットワークに参加できます。

使用する必要があるクラスは、NEHotspotConfigurationと呼ばれます。

使用するには、アプリの機能でHotspot機能を有効にする必要があります( Adding Capabilities )。クイックワーキングの例:

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

44
Enthouan

iOS 11でwifiネットワークに接続します。次のようにssidとパスワードを使用してwifiに接続できます。

アプリIDでホットスポットを有効にし、サービスを構成します

Enable Hotspot on App Id configure services

ホットスポット設定を有効にした後

After Enable Hotspot Configuration

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

ここや他の場所で見ているものとは反対に、あなたはそれをすることができます。通常のユーザーに十分なものを作るのは難しいですが、そうである必要がなければ、コーディングは本当に簡単です。それはエンタープライズ管理者のものですが、誰でもできます。 「接続プロファイル」を検索します。たとえば、ComcastはiOSアプリでこれを行い、ホットスポットを設定します。

基本的に、SafariまたはMailを介してデバイスに取り込むXMLドキュメントです。それには多くのトリックがあり、ユーザーエクスペリエンスは素晴らしいものではありませんが、iOS 10で動作し、ジェイルブレイクを必要としないことを確認できます。 Configuratorを使用してXMLを生成し、 このスレッド を提供することをお勧めします(ただし、特にWiFiに関するものではないため、人々はそれを見つけられません)。 this blog forインストールされているかどうかを照会します。これは驚くほど簡単ではありませんが、実際に機能します。

この質問に回答しました 何度も繰り返しますが、十分な担当者がいないか、質問を重複として閉じる方法を見つけられないため、より良い回答を簡単に見つけることができます。

UPDATE:iOS 11は、この機能のためのAPIを直接(最終的に!)提供します。 NEHotspotConfiguration を参照してください。 Xamarin C#コードは次のようになります。

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

短い答え、いいえ。


長い答え:)

この質問は何度も聞かれました。

最も興味深い答えは、GitHubプロジェクトを指す最初のリンク wifiAssociate にあるようです。ただし、3番目のリンクの誰かが、これはiOS8ではもう機能しないので、実行に苦労するかもしれないと説明しています。
さらに、iDeviceをジェイルブレイクする必要があります。

7
filaton

私の2セント:あなたが得た場合:

アーキテクチャ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
ingconti

[機能]で[ネットワーク拡張機能とホットスポットの構成]の両方がオンになっていることを確認してください。

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

IOS 11.の後、wifiネットワークをプログラムで接続できます。次のようにssidとパスワードを使用してwifiを接続できます。

Swift

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

Xcode 9とSwift 4を使用してwifiに接続できます

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