概要
NEHotspot Helperクラスは、主にWi-Fiネットワークなどの分類、認証に使用されます。
以下、URLを参考にまとめました。
ただし、参考先にも記載あるようある時点で更新が止まってますので最新版と差分がある可能性はあります。
(個人的には問題ないと思い参考させて頂きました)
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/Hotspot_Network_Subsystem_Guide/Contents/Introduction.html#//apple_ref/doc/uid/TP40016639-CH1-SW1
*訳し方がおかしかったり、変な解釈をしてしまっている箇所もあるかもしれません。お気づきになられたらご指摘いただけると幸いです。
ホットスポットヘルパー
用語については、以下URLを参考にさせて頂きました。
https://www.intel.co.jp/content/www/jp/ja/tech-tips-and-tricks/what-is-a-hotspot.html
一部抜粋
ホットスポットは、インターネット・サービス・プロバイダーに接続されたルーターを使用したワイヤレス・ローカル・エリア・ネットワーク (WLAN) 経由で、通常は Wi-Fi を使用してインターネットにアクセスできる物理的な場所です。ほとんどの人は、この場所を「Wi-Fi ホットスポット」または「Wi-Fi* 接続」と呼んでいます。簡単に言うと、ホットスポットは、ユーザーがスマートフォンやタブレットなどのモバイルデバイスをインターネットにワイヤレス接続できる物理的な場所です。
ホットスポットは、プライベートな場所にある場合もあれば、コーヒーショップ、ホテル、空港、飛行機などの公共の場所にある場合もあります。多くの公共ホットスポットでは、オープン・ネットワーク上で無料のワイヤレスアクセスを提供していますが、有料のサービスもあります。
NEHotspot Helperの主な機能
主な機能は以下2つ
Authentication State Machine
Scan List Filtering
Authentication State Machine
ステートマシンは、Wi-Fiネットワークに関連付けられた後、接続状態をヘルパーから受け取れる。
Wi-Fi接続前、接続後などの状態が分かるので実装者はそのタイミングでさせたい処理を挟むことが出来るようになる
ステータスの状態遷移図は以下(ステータスの詳細は以下記載)
主なシーケンス
【ネットワークがキャプティブの場合】
1.ステータスが「Inactive」
2.Wi-Fiネットワークに関連付ける
3.IP接続が確立される
4.ステータスが「Evaluating」に遷移
5.各Hotspot HelperにEvaluateコマンドを送信する
6.各Hotspot HelperがEvaluateコマンドを処理し、ネットワークがキャプティブ(認証が必要)かどうか判断する
7.Evaluateコマンドの結果、キャプティブを示す。”best”のホットスポットヘルパーが選択される
8.ステータスが「Authenticating」に遷移。”best”ヘルパーを指定してキャッシュエントリーを作成する
9.Authenticateコマンドを”best”ヘルバーに送信する
10.”best”ヘルバーは、ネットワークへの認証に必要な操作を実行し、kNEHotspotHelperResultSuccessを返す
11.ステータスが「Authenticated」に遷移。Maintainingタイマーをセットする
12.タイマーが始動する。ステータスが「Maintaining」に遷移
13.”best”ヘルパーにMaintainコマンドを送信する
14.”bset”ヘルパーはコマンドを処理し、kNEHotspotHelperResultSuccessを返す
15.手順11〜14を繰り返す
【ネットワークがキャプティブでない場合】
1.ステータスが「Inactive」
2.Wi-Fiネットワークに関連付ける
3.IP接続が確立される
4.ステータスが「Evaluating」に遷移
5.各Hotspot HelperにEvaluateコマンドを送信する
6.各Hotspot HelperがEvaluateコマンドを処理し、ネットワークがキャプティブ(認証が必要)かどうか判断する
7.Evaluateコマンドの結果、キャプティブ出ないことを示す
8.ステータスが「Authenticated」に遷移。キャッシュエントリーが作成される
【ネットワークがキャプティブでUIが必要な場合】
1.ステータスが「Inactive」
2.Wi-Fiネットワークに関連付ける
3.IP接続が確立される
4.ステータスが「Evaluating」に遷移
5.各Hotspot HelperにEvaluateコマンドを送信する
6.各Hotspot HelperがEvaluateコマンドを処理し、ネットワークがキャプティブ(認証が必要)かどうか判断する
7.Evaluateコマンドの結果、キャプティブを示す。”best”のホットスポットヘルパーが選択される
8.ステータスが「Authenticating」に遷移
9.Authenticateコマンドを”best”ヘルバーに送信する
10.”best”ヘルパーが、処理が続行するにはユーザー入力が必要であると判断。UILocalNotificationを作成し、kNEHotspotHelperResultUIRequiredを返す
11.ステータスが「PresentingUI」に遷移
12.PresentUIコマンドを”best”ヘルパーに送信
13.”best”ヘルパーは、UILocalNotificationの結果をフォアグランドに表示し、必要な認証を実行。eturnkNEHotspotHelperResultSuccessを返す
14.ステータス「Authenticated」に遷移。”best”ヘルパーを指定し、キャッシュリストが作成される
各ステータスの説明
Inactive State
・インターフェイスにIP接続がない場合に入るステータス
・初期状態
・この状態は、best_helperとexclude_listをクリアする
・インターフェイスのIP接続は、認証された状態に達するまで抑制される
*一般的なネットワークトラフィックを運ぶことができないインターフェイスを介してアプリケーショントラフィックを送信することを避けるため
Evaluating State
・インターフェイスのIP接続が確立され、キャッシュリストにホットスポットヘルパーが指定されていない場合に入るステータス
・exclude_listにない各ヘルパーには、kNEHotspotHelperCommandTypeEvaluateコマンドが与えられる
・ヘルパーは、ネットワークを処理する能力(低い、低い、高い)に対する信頼レベルを示す
・ヘルパーがネットワークの信頼性を主張していない場合、ステータスは「Authenticated」に移る
・ネットワークを要求するヘルパーの中で、ステートマシンは最も高い信頼度を持つものを選択し、best_helperをステータス「Authenticating」に移す
・信頼性の高いネットワークを主張する最初のヘルパーがbest_helperになる
Authenticating
・認証が必要な場合に入るステータス
・best_helperにはkNEHotspotHelperCommandTypeAuthenticateコマンドが与えられる
・ヘルパーからの戻り値が
【kNEHotspotHelperResultSuccess】
→ ステータスは「Authenticated」に移る
【kNEHotspotHelperResultUIRequired】
→ ステータスは「PresentingUI」に移る
【kNEHotspotHelperResultUnsupportedNetwork】
→ ヘルパーはexclude_listに追加され、ステータスは「Evaluating」に映る
【上記以外】
→ ステータス「Failure」に移る
Authenticated
・インターフェイスが認証を要求しない or ネットワークが正常に認証された場合
・インターフェイスのIP接続は抑制されず、一般的なネットワークトラフィックを伝送できる状態
・maintaining timerが300秒後に起動する
・maintaining timerが起動すると、ステータスは「Maintaining」に移る
Maintaining
以下の2つの場合に入るステータス
1. maintaining timerが「Authenticated」ステータスから起動した場合
2. インターフェイスがIP接続を取得し、best_helperを指定するキャッシュエントリーが見つかった場合
・best_helperにkNEHotspotHelperCommandTypeMaintainコマンドが与えられる
・ヘルパーからの戻り値が
【kNEHotspotHelperResultSuccess】
→ ステータスが「Authenticated」に戻る
【kNEHotspotHelperResultAuthenticationRequired】
→ ステータスが 「Authentivating」に移る
【上記以外】
→ インターフェイスのIP接続が再び抑制され、ステータスが「Evaluating」に移る
PresentingUI
・best_helperがUIを表示する必要があると示した場合に入るステータス
・フォアグランで処理するbest_helperに、kNEHotspotHelperCommandTypePresentUIコマンドが与えられる
・ヘルパーからの戻り値が
【kNEHotspotHelperResultSuccess】
→ ステータスが「Authenticated」に移る
【kNEHotspotHelperResultUnsupportedNetwork】
→ ヘルパーがexclude_listに追加され、ステータスが「Evaluating」に移る
【上記以外】
→ ステータスがFailureに移る
Failure
・回復不能なエラーが発生した場合に入るステータス
・Wi-Fiのネットワークが解除され、ステータスが「Inactive」に移る
Scan List Filtering
・Hotpot Helperの重要な機能の1つで、「Wi-Fi scan list filtering」を実行する
・設定アプリから近くのWi-Fiネットワークのリストを閲覧できる
・主張するホットスポットヘルパーに注釈(15文字以内)を入れることが出来る
→注釈を与えることで、ユーザーに検知してもらいやすくなる
注釈は、「Wi-Fi scan list filtering」プロセスによって決定される
・システムはWi-Fiネットワークのリストを含むkNEHotspotHelperCommandTypeFilterScanListコマンドを発行することにより、近くのWi-Fiネットワークに関するフィードバックを各ホットスポットヘルパーにリクエストする。
そのレスポンスに応じてHotpotヘルパーが指定されたネットワークをサポートする。
各コマンド詳細
以下、Google翻訳かけただけ・・
時間ある時にまとめます。
【kNEHotspotHelperCommandTypeFilterScanList】
・Wi-Fiネットワークリストがユーザーに提示されたときに、すべてのヘルパーに発行される
・ヘルパーは、コマンドwNEHotspotHelperCommandのnetworkListプロパティを使用して、近くのWi-Fiネットワークのリストを取得する
・各Wi-Fiネットワークは、NEHotspotNetworkオブジェクトで表される
・ヘルパーが処理できるネットワークの場合は、NEHotspotNetworkに注釈を付けて新しいリストに追加する
・リストが完成すると、NEHotspotHelperResponseが作成され、setNetworkList:メソッドを使用して注釈が付けられる
・ホットスポットヘルパーが近くのネットワークを処理できない場合は、setNetworkList:メソッドを呼び出さずに応答を返す
【kNEHotspotHelperCommandTypeEvaluate】
・kNEHotspotHelperCommandTypeEvaluateコマンドは、認証ステートマシンの一部として発行される
・このアプリケーションは、現在のネットワークを評価し、そのネットワークを処理する能力を示すものと期待される
・現在のネットワークのプロパティは、NEHotspotHelperCommandオブジェクトのnetworkプロパティを介してアクセスされます。
・ネットワークプロパティのタイプはNEHotspotNetworkです。 NEHotspotNetworkは、SSIDやBSSIDなどのさまざまなWi-Fiプロパティへのアクセスを提供します。
・ヘルパーによって実行される評価は、単純なテーブルルックアップでも、ネットワークをさらに調査するためにネットワークトラフィックを送信することもできます。
・ヘルパーが正確に反応し、認識できないネットワークを主張していないことが重要です。
・ヘルパーは、45秒以内に評価を実行します。
・1人のヘルパーが高い信頼度でネットワークを処理することを示す応答を返すとすぐに、他のすべてのヘルパーからの応答は無視されます。
・まだ応答していないヘルパーは、バックグラウンドに戻ります。 これは、ネットワークへの不必要な遅延がないことを保証するためです。
【kNEHotspotHelperCommandTypeAuthenticate】
・kNEHotspotHelperCommandTypeAuthenticateコマンドは、評価中の状態で最もよく考えられたヘルパーに対して発行されます。
・ヘルパーは、ネットワークを捕まえないようにするために必要なネットワーク操作を実行することが期待されています。
・ヘルパーは45秒間認証を実行します。
・認証に成功すると、ヘルパーはkNEHotspotHelperResultSuccessを示すNEHotspotHelperResponseを提供し、ステートマシンは認証済み状態に移行します。
・ヘルパーは、ネットワークが実際に処理できるネットワークではないと判断した場合、kNEHotspotHelperResultUnsupportedNetworkの結果を返します。
この場合、状態マシンは、除外リストにヘルパーを追加し、評価状態に戻る。
ヘルパーが致命的な障害に遭遇すると、kNEHotspotHelperResultFailureを返します。
Wi-Fiネットワークの関連付けが解除され、そのネットワーク上の自動参加が無効になります。
ヘルパーが一時的な障害に遭遇した場合、ヘルパーはkNEHotspotHelperResultTemporaryFailureを返します。
・Wi-Fiネットワークは関連付けが解除されていますが、ネットワーク上の自動参加は無効になっていません。
・ヘルパーがユーザーの入力を続行する必要がある場合は、ユーザーの注意を引くためにUILocalNotificationを作成し、kNEHotspotHelperResultUIRequiredを返します。
この表は、さまざまな結果コードがどのように解釈されるかをまとめたものです。
kNEHotspotHelperResultSuccess | 次のステータス | 説明 |
---|---|---|
kNEHotspotHelperResultSuccess | Authenticated | 認証に成功しました。 インタフェースはもはや非合法である。 一般的なインターネットトラフィックの準備が整いました。 |
kNEHotspotHelperResultUnsupportedNetwork | Evaluating | 実際にはヘルパーによって処理されるネットワークではありません。 |
kNEHotspotHelperResultTemporaryFailure | Failure | 一時的なエラーが発生しました。 自動結合は変更されません。 |
kNEHotspotHelperResultUIRequired | PresentingUI | ユーザーの操作が必要です。 |
kNEHotspotHelperResultFailure (もしくは、上記以外) | Failure | 致命的なエラーが発生しました。 自動結合を無効にします。 |
【kNEHotspotHelperCommandTypePresentUI】
・kNEHotspotHelperCommandTypePresentUIコマンドは、選択されたヘルパーが認証中の状態でkNEHotspotHelperResultUIRequiredを返した後に発行されます。
・アプリケーションはこのコマンドに応答する時間が無制限です。
・このコマンドでは、アプリケーションはバックグラウンドで実行されません。
・ユーザーの操作と認証が完了すると、ヘルパーはkNEHotspotHelperResultSuccessの結果を提供し、ステートマシンは認証された状態に移行します。
・ヘルパーは、ネットワークが実際に処理できるネットワークではないと判断した場合、kNEHotspotHelperResultUnsupportedNetworkの結果を返します。
この結果により、認証状態マシンは、除外リストにヘルパーを追加し、評価状態に戻る。
・ヘルパーが成功しなかった場合は、kNEHotspotHelperResultFailureを返します。
次の表は、結果の値の解釈方法をまとめたものです。
PresentUIの結果 | 次のステータス | 説明 |
---|---|---|
kNEHotspotHelperResultSuccess | Authenticated | 認証に成功しました。 インタフェースはもはや非合法である。一般的なインターネットトラフィックの準備が整いました。 |
kNEHotspotHelperResultUnsupportedNetwork | Evaluating | 実際にはヘルパーによって処理されるネットワークではありません |
kNEHotspotHelperResultTemporaryFailure | Failure | 一時的なエラーが発生しました。 自動結合は変更されません。 |
kNEHotspotHelperResultFailure(もしくは、上記以外) | Failure | 致命的なエラーが発生しました。 自動結合を無効にします。 |
【kNEHotspotHelperCommandTypeMaintain】
・kNEHotspotHelperCommandTypeMaintainコマンドは、2つのインスタンスで選択されたヘルパーに発行されます。
1. 定期的に(現在は300秒ごとに)、ネットワークに接続している間に捕捉を再検出する機会を与えます。
2. 選択したヘルパーが以前に処理したネットワークに再び参加するとき。
・ヘルパーは45秒間応答を送信します。
・ヘルパーがkNEHotspotHelperResultSuccessを返した場合、ステートマシンはAuthenticated状態に戻ります。
・ヘルパーがkNEHotspotHelperResultAuthenticationRequiredを返した場合、ステートマシンは認証ステートに戻り、プラグインが認証を実行します。
・ヘルパーがkNEHotspotHelperResultFailureを返した場合、ステートマシンは評価中状態に戻ります。
次の表は、結果の値の解釈方法をまとめたものです。
Maintainの結果 | 次のステータス | 説明 |
---|---|---|
kNEHotspotHelperResultSuccess | Authenticated | 操作成功 |
kNEHotspotHelperResultAuthenticationRequired | Authenticated | ネットワークに認証が必要 |
kNEHotspotHelperResultFailure(もしくは、上記以外) | Evaluating | エラーが発生しました |
【kNEHotspotHelperCommandTypeLogoff】
・kNEHotspotHelperCommandTypeLogoffコマンドは、選択したヘルパーに発行され、ログオフ処理を開始します。
・現在このコマンドは、NEHotspotHelperのlogoff:classメソッドを呼び出した後にヘルパーに提供されます。
(BOOL)logoff:(NEHotspotNetwork *)network;
・ネットワークオブジェクトは、現在認証されているWi-Fiネットワークに対応している必要があります。
・ヘルパーは、認証を実行したヘルパーでもなければなりません。
これらの条件が満たされない場合、この関数はFALSEを返します。
・ヘルパーがlogoff:メソッドを正常に呼び出すと、
認証ステートマシンはLoggingOffステートに入り、タイプkNEHotspotHelperCommandTypeLogoffのコマンドがヘルパーのハンドラブロックに渡されます。
・ヘルパーはコマンドに45秒間応答します。
ヘルパーがコマンドに応答するか、または45秒が経過すると、Wi-Fiネットワークは関連付け解除され、認証ステートマシンは非アクティブ状態になります。