アプリの近接通信のテストとトラブルシューティング (HTML)
[この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、 「最新のドキュメント」をご覧ください]
このトピックでは、アプリをストアに提出する前に、アプリ開発者がアプリの近接通信のテストとトラブルシューティングを行うためのガイドラインを示します。
開始する前に
近接通信は、2 台のデバイスで実行されているアプリの 2 つのインスタンス間で共有されるアプリのエクスペリエンスを実現するための優れた方法です。近接通信が有効なアプリでは、アプリのユーザーが 2 台のデバイスを同時にタップして接続を開始したり、ユーザーがワイヤレス範囲内でアプリを実行している別のデバイスを検索したりすることができます。他の PC 上のピア アプリの参照は、Wi-Fi Direct を使って実行します。Windows Phone では、ピア アプリの検出は Bluetooth を使って実行され、他の電話で実行されているピア アプリを検出します。
タップ ジェスチャに応答する機能をテストするには、各デバイスに近距離通信 (NFC) 無線などの近接通信機能がインストールされている必要があります。PC でワイヤレス参照を使った機能をテストするには、各 PC で Wi-Fi Direct をサポートしている必要があります。
注 Windows Phone ストア アプリで参照機能をテストするには、各電話で Bluetooth をサポートしている必要があります。
テストのためのセットアップ:
近距離通信 (NFC) 無線などの近接通信タップをサポートするハードウェアがない場合、Windows Driver Kit (WDK) サンプルに含まれる近接通信ドライバー サンプルを使うことができます。サンプル ドライバーを使って、2 つのデバイス間のネットワーク接続でタップ ジェスチャをシミュレートすることができます。WDK のダウンロード方法について詳しくは、Windows Driver Kit (WDK) に関するページをご覧ください。WDK とサンプルをインストールすると、近接通信のドライバー サンプルは、WDK サンプルをインストールした場所の src\nfp ディレクトリに配置されます。シミュレーターを構築し、実行する手順については、src\nfp\net ディレクトリにある NetNfpProvider.html ファイルを参照してください。シミュレーターを起動すると、近接通信アプリがフォアグラウンドで実行されている間、シミュレーターはバックグラウンドで実行されます。タップ シミュレーションが動作するには、アプリがフォアグラウンドに存在している必要があります。
PeerFinder クラスを使ったアプリの接続
PeerFinder クラスを使うと、2 つの異なるデバイスで動作する同じアプリの間でソケット接続 (ピア アプリ) を作ることができます。PeerFinder クラスを使うと、タップ ジェスチャからピア アプリを接続することも、Wi-Fi Direct を使ってワイヤレス範囲内のピアを参照することもできます。どちらの方法でピア アプリを接続してもピア アプリ間には開かれたソケットが作られるため、トリガーされる (タップによる) 接続機能と参照による (Wi-Fi Direct による) 接続機能の両方をアプリでサポートすることをお勧めします。
ピア アプリを接続する例については、「クイック スタート: タップまたは参照によるアプリの接続」またはサンプル ギャラリーの近接通信に関するサンプルをご覧ください。近接通信を使うアプリ作成のガイドラインについては、「近接通信を使った開発のガイドライン」をご覧ください。
ピア アプリの接続テスト
- 2 台のデバイスにアプリをインストールし、両方のデバイスでアプリを起動します。
- 両方のデバイスで、ピア接続のためのアドバタイズを行います。この処理を実行するには、Start メソッドを呼び出します。
- トリガーされる接続をテストするには、デバイスを同時にタップします。
- タップ ジェスチャの状態がアプリの UI に反映されることを確認します。つまり、ピアが見つかったときや、デバイスが接続処理中のときなどがその状態に当たります。詳しくは、TriggeredConnectionStateChanged イベントについてご覧ください。
- 接続が成功した場合、両方のデバイスに対してネットワーク機能の有効になった状態が、アプリの UI に反映されていることを確認します。
- 接続が失敗した場合、ネットワーク接続の失敗が、アプリの UI でユーザーに示されることを確認します。
- ワイヤレス接続をテストするには、2 台のデバイスのどちらかを使って、利用できるピア接続を参照します。この処理を実行するには、FindAllPeersAsync メソッドを呼び出します。参照は、PC 間または電話間のみでサポートされ、電話と PC 間ではサポートされません。参照が行われるメカニズムは、PC で実行されているアプリと電話で実行されているアプリで異なります。Windows Phone では Bluetooth を使った参照のみがサポートされ、PC では Wi-Fi Direct を使った参照のみがサポートされます。
- 接続が成功した場合、両方のデバイスに対してネットワーク機能の有効になった状態が、アプリの UI に反映されていることを確認します。
- 接続が失敗した場合、ネットワーク接続の失敗が、アプリの UI でユーザーに示されることを確認します。
- アプリで 3 つ以上のピアの接続をサポートする場合は、複数のデバイスを使うためのテストをさらに行います。
トリガーされる (タップによる) 接続をサポートするアプリが 2 台のデバイスにインストールされている場合、一方のデバイスからタップ ジェスチャを使って接続を要求すると、もう一方のデバイスのユーザーはそのアプリの起動またはインストールを求められます。要求を行う側のデバイスでは、フォアグラウンドでそのアプリが実行されている必要があります。FindAllPeersAsync メソッドを使って接続を参照する場合、この機能はサポートされません。
タップ ジェスチャから起動されたアプリのテスト
- 2 台のデバイスにアプリをインストールします。最初のデバイスだけでアプリを起動します。
- アプリを実行しているデバイスで、ピア接続のためのアドバタイズを行います。この処理を実行するには、Start メソッドを呼び出します。
- デバイスを同時にタップします。
- 2 台目のデバイスで、ユーザーにアプリを起動するよう求める通知が表示されることを確認します。その通知を受け入れます。
- アプリが 2 つ目のデバイスで正常に起動し、すぐに近接通信ネットワーク ソケットを確立することを確認します。両方のデバイスに対してネットワーク機能の有効になった状態が、アプリの UI に反映されていることを確認します。
- アプリが正常に起動されなかった場合、要求を行ったデバイスのアプリの UI に、試行の失敗が反映されていることを確認します。アプリは起動しても近接通信ネットワーク ソケットの確立に失敗した場合、両方のデバイスで、アプリの UI にその失敗が反映されていることを確認します。
アプリは、ピア アプリの起動要求が拒否されたシナリオに対応するように記述されている必要があります。
タップ ジェスチャから拒否された要求のテスト
- 2 台のデバイスにアプリをインストールします。最初のデバイスだけでアプリを起動します。
- アプリを実行しているデバイスで、ピア接続のためのアドバタイズを行います。この処理を実行するには、Start メソッドを呼び出します。
- デバイスを同時にタップします。
- 2 台目のデバイスで、アプリを起動するか、アプリをインストールするようユーザーに求める通知が表示されることを確認します。その通知を拒否します。
- 2 台目のデバイスではアプリが起動されることなく、要求が拒否されたことが、要求を行ったアプリの UI に反映されていることを確認します。
ProximityDevice クラスを使ったメッセージの発行と購読
ProximityDevice クラスを使うと、タップ ジェスチャの際にデバイス間で短いメッセージを発行することができます。インストールされた近接通信ハードウェアの範囲内に、デバイスが存在している必要があります。通常、これは 2 ~ 3 cm です。
タップ ジェスチャ中にメッセージを発行するには、発行する側のデバイスで PublishMessage、PublishBinaryMessage、または PublishUriMessage メソッドと、受信する側のデバイスで SubscribeForMessage メソッドを使います。 メッセージの発行と購読の例については、「クイック スタート: タップを使ったメッセージの発行と購読」またはサンプル ギャラリーの近接通信に関するサンプルをご覧ください。
メッセージの発行と購読を行うアプリのテスト
- 一方のデバイスで発行を行うアプリを起動し、もう一方のデバイスで購読を行うアプリを起動します。これには、両方のデバイスで同じアプリを使うことができますが、同じアプリでなくてもかまいません。
- メッセージを発行する状態と、メッセージを受信する状態にアプリを設定します。これには、発行を行う側のアプリで発行メソッドの 1 つを呼び出し、受信側のアプリで SubscribeForMessage メソッドを呼び出すことが必要です。
- デバイスを同時にタップします。
- メッセージが正常に送信された場合、メッセージを受信したことが、購読を行うアプリの UI に反映されることを確認します。発行を行うアプリのオプションとして、発行メソッドのオーバーロードを呼び出すことができます。このメソッドに、メッセージが送信されると呼び出される型 MessageTransmittedHandler のイベント ハンドラーのパラメーターを含めます。このイベント ハンドラーのコードでは、発行を行うアプリの UI を更新して、メッセージが正常に送信されたことを反映することができます。
- メッセージの発行に失敗したり、メッセージが受信されなかったりした場合、アプリのコードを確認して問題を調査します。トラブルシューティングの手順については、このトピックの「"トラブルシューティング"」セクションの「"発行された購読対象のメッセージが受信されない"」をご覧ください。
- 両方のアプリを、メッセージを発行する状態と購読する状態から戻すことができるかテストします。発行を行う側のデバイスで、StopPublishingMessage メソッドを呼び出します。購読を行う側のデバイスで、StopSubscribingForMessage メソッドを呼び出します。デバイスを同時にタップした後、メッセージの発行や受信が行われないことを確認します。
トラブルシューティング
発生した問題がここに記載されていない場合は、Windows 開発者フォーラムで答えを見つけることができる場合があります。
問題 | トラブルシューティングの手順 |
---|---|
タップに応答しない。タップ ジェスチャを使ってピア アプリを接続するときや、タップ中にメッセージの発行と購読を行うときに、タップ ジェスチャに応答するコードが実行されません。 | タップ ジェスチャにかかわるデバイスが近接範囲内 (少なくとも 2 cm 以内) に存在することを確認します。近接通信デバイスの場所に基づいて、デバイスを配置する必要が生じることもあります。デバイスが近接範囲内に入ると、Windows によってサウンドが再生されます。 DeviceArrived イベントと DeviceDeparted イベントを使うと、デバイスが近接通信範囲を出入りする際に通知を行うことができます。コードに DeviceArrived イベントと DeviceDeparted イベントのイベント ハンドラーを追加します。イベント ハンドラーのコードが実行された場合は、タップ ジェスチャが成功したことになります。DeviceArrived イベントと DeviceDeparted イベントのイベント ハンドラーのコードが実行されない場合は、近接通信ハードウェアまたはドライバーに問題がある可能性があります。 トリガーされる接続を作るためにアプリで PeerFinder クラスを使っている場合に、DeviceArrived イベントは発生するが、TriggeredConnection イベントが発生しないときは、次のすべての内容を検証します。 |
タップした後でアプリが起動しない。 | タップにかかわる 2 台のデバイスの少なくともどちらかで、アプリがフォアグラウンドで実行されていることを確認します。アプリが少なくともどちらかのデバイスのフォアグラウンドで実行されているのに、タップした後で起動しない場合は「"タップに応答しない"」のトラブルシューティング手順をご覧ください。 フォアグラウンドで実行されているアプリで TriggeredConnection イベントが発生しても、タップ ジェスチャに使うもう一方のデバイスでアプリの起動を求めるメッセージが表示されない場合は、アプリが正常にインストールされていることを確認します。アプリが正常にインストールされている場合、アプリはスタート タイルから起動し、フォアグラウンドでの実行中にタップ ジェスチャから接続します。 |
参照中にピアが見つからない。 |
|
タップから接続しようとすると、1 分後に失敗する。 | タップにかかわる両方のデバイスのワイヤレス設定を確認し、Wi-Fi 通信と Bluetooth 通信が有効になっていることを確認します。どちらのデバイスも Wi-Fi Direct または Bluetooth 通信をサポートするワイヤレス デバイスを備えていない場合は、両方のデバイスが同じネットワークに接続されていることを確認します。 |
発行された購読対象のメッセージが受信されない。メッセージを発行し、購読する際に、発行されたメッセージが購読を行うデバイスによって受信されません。 | 発行を行うデバイスで、PublishMessage、PublishUriMessage、または PublishBinaryMessage メソッドのオーバーロードを使うことができます。これらのメソッドに、メッセージが送信されると呼び出される MessageTransmittedHandler 型のイベント ハンドラーのパラメーターを含めます。この発行メソッドへの呼び出しが成功し、MessageTransmittedHandler イベント ハンドラーのコードが実行されると、メッセージは正常に送信されたことになります。 購読を行うデバイスで、SubscribeForMessage メソッドに渡した messageType パラメーターの値が PublishMessage または PublishBinaryMessage メソッドに渡された messageType パラメーターの値に一致することを確認します (PublishUriMessage メソッドの場合は、messageType の値が常に WindowsUri になるようにします)。メッセージ型の値では、大文字と小文字が区別されます。 |
関連トピック
Windows.Networking.Proximity namespace
サンプル