接続の使用状況データのガイドライン
接続されたアプリで Windows ランタイム Network Information API を使うときは、以下の推奨事項を考慮してください。
ネットワーク コストの種類に応じたアプリ動作の変更
デバイスで新しいネットワークが検出されると、Windows 8 により自動的に接続オプションが提供されますが、それまでの接続から新しいネットワークに毎回スムーズに移行できるとは限りません。Web に接続する Windows ストア アプリは、Network Information API を使って、データを送受信するネットワークのコスト情報とステータス変更イベントを取得する必要があります。
動作を適切に変更するには、各接続に対して指定されている NetworkCostType 値を使います。
ネットワーク コスト タイプ | 推奨されるアプリの動作 |
---|---|
制限なし |
|
Variable (データの上限が迫っているとき) |
|
Unknown |
|
Web への信頼性の高い接続の維持
ネットワーク空間におけるアプリの機敏性を維持する最も基本的な方法の 1 つは、Web と情報をやり取りする際の通信品質を一定のレベルに保つことです。そのためには、接続プロファイルから得られた情報と、以後伝えられるネットワーク ステータス変更通知を利用し、現在の要件を満たした利用可能なネットワークを識別する必要があります。
すべての Windows ストア アプリは、Web 接続をサポートするために、次のことを実行する必要があります。
- GetInternetConnectionProfile を呼び出して、インターネットへの接続コストをチェックします。
- 接続のネットワーク ステータス変更通知を受け取るための登録を行います。
- 接続のネットワーク操作を初期化します。
- ネットワーク ステータス変更通知は、利用できるコストや接続のオプションが変わっている可能性を示します。アプリは以下を実行する必要があります。
- インターネットへの接続コストをチェックします。コスト体系が無料から有料へ、または有料から無料へ変わっていた場合は、ネットワーク操作を再試行します。Windows 8 では、最も低コストのネットワークが自動的に選ばれます。
- インターネット接続のコスト体系は変わっていないが、コストに関連した通知を受け取った場合 (データ使用量が上限の 80% を超えた、変動制、ローミングなど)、前の NetworkCostType の表に従って動作を調整します。
- 接続が切断されたことがエラーで示された場合は、アプリで以下のことを実行します。
- 利用可能な別のネットワークを使ってインターネットへの接続コストをチェックします。上記の NetworkCostType の表に記載したガイドラインに従ってください。
- 操作を再試行します。失敗した場合は、NetworkStatusChange 通知を待ちます。
接続アプリのデバッグとトラブルシューティング
ネットワークの問題は、アプリがハングしたり、クラッシュしたりする原因となります。対処不可能なダイアログ ボックスや紛らわしいエラー メッセージがユーザーに表示されることもあります。こうしたエラーは、ネットワーク スタックのどこで発生してもおかしくないので、デバッグが困難な場合があります。
ネットワークを (ソケットで) 直接的に、または (ネットワークを使う API で) 間接的に使うすべての Windows ストア アプリに関係します。通常はエラーの発生条件を開発者に代わりオペレーティング システムが自動的に処理し、それができない場合、アプリでエラーに対処できるのが理想です。
すべての接続 Windows ストア アプリに求められる対応を次に示します。
- ネットワーク エラーが発生したら、状況に応じて操作を再試行します。たとえば、認証に失敗した場合には操作を再試行しません。これに対し、通信中のネットワークがつながらなくなった場合は、別のネットワークが利用できる可能性があるので操作を再試行します。操作を再試行するだけで、多くのエラーは解消されます。再試行の際は、「ネットワーク ステータスの変化への対応」に記載したガイドラインに従ってください。
- 必ず非同期 API を使うようにし、ブロック呼び出しが UI スレッドに存在しないようにします。つまり、ネットワーク操作で完了までに時間がかかったりエラーが発生したとしても、アプリがハングしないようにします。Windows ランタイムの非同期的な特性を、同期的な動作で押さえつけてしまうことのないように注意してください。
- ネットワークの切断と再接続、中断と再開、ネットワークの切り替えなどの操作を行いながら、さまざまなネットワーク環境でアプリをテストします。
- アプリケーションをテストしていて、一見してわからないようなエラーが見つかった場合は、ETW トレースを有効にします。
セキュリティに関する考慮事項
次の記事では、安全な C++ コードを記述するためのガイダンスが示されています。
関連トピック
Network Information のサンプルに関するページ
開発者向け (HTML)
開発者向け (XAML)