機密性の高いデバイスの使用のガイドライン (C#/VB/C++ と XAML を使った Windows ストア アプリ)

このトピックでは、マイク、カメラ、位置情報、テキスト メッセージングなどの機密性の高いデバイス機能を使う際のベスト プラクティスについて説明します。 マイク、カメラ、位置情報取得機能、テキスト メッセージング サービスは、ユーザーの個人データにアクセスしたり、ユーザーに課金したりすることがあります。そのため、Windows ストア アプリは、ユーザーがこうした機密性の高いデバイスを制御できるようにする機能を備えています。アプリが機密性の高いデバイスにアクセスする場合は、デバイス アクセスを有効または無効にする方法を説明する箇所を設けてください。

アプリによる機密性の高いデバイスの使用をユーザーが制御する方法

Windows ストア アプリが機密性の高いデバイスを使うためのアクセス許可は、アプリごと、ユーザーごとに制御します。ユーザーは、同意のプロンプトを使うか設定チャームを使ってアクセス許可を制御します。

同意のプロンプト

次のスクリーン ショットは、Windows ストア アプリに表示された同意のプロンプトを示しています。このプロンプトは、アプリが機密性の高いデバイスに初めてアクセスするときに表示されます。ユーザーは、デバイス機能へのアプリのアクセスをブロックするか許可するかを選ぶことができます。Windows ではその応答が記憶されるので、同じアプリについて確認のメッセージがもう一度表示されることはありません。

Windows ストア アプリの同意プロンプト

設定チャーム

Windows 8 のユーザーは、設定チャームを使って機密性の高いデバイスへの各アプリのアクセスを制御することもできます。設定チャームをタップして設定ポップアップを開き、機密性の高いデバイス機能へのアプリのアクセスを有効または無効にします。

設定チャームは、以下の画像に示すように、アプリの右側にあります。

設定チャーム

設定チャームでは、以下の画像に示すように、機密性の高い機能を有効または無効にできるポップアップを開くことができます。

アプリの位置情報設定を提供する設定ポップアップ

デバイスの使用を開始するかどうかの判断

デバイスにアクセスする最初の API 呼び出しによって、同意のプロンプトがトリガーされます。アプリの主な目的では機密性の高いデバイスへのアクセスが必要ない場合は、デバイスを使うためのアクセス許可について確かめるプロンプトがアプリの起動と同時に表示されると、ユーザーにとって紛らわしい可能性があります。優れたユーザー エクスペリエンスを実現するために、次のガイドラインに従ってください。

ガイドライン

機密性の高いデバイスの使用がアプリにとって必須ではない場合は、ユーザーが明確に要求するまでそのデバイスにアクセスしないでください。

ソーシャル ネットワーキング アプリに、"位置情報を使ってチェックイン" や "プロフィール写真を撮る" というボタンがあるとします。このアプリでは、ユーザーが対応するボタンをクリックするまで位置情報やカメラにアクセスしないようにします。

アプリの主な機能のためにデバイスへのアクセスが必要な場合は、アプリの起動時にデバイスにアクセスできます。

接続したカメラからライブ ビデオをキャプチャするアプリでは、その主な目的のためにカメラが必要です。このアプリが起動時にカメラを使ってすぐにビデオ プレビューを表示するのは問題ありません。

 

同意のプロンプトをトリガーする API 呼び出しについて詳しくは、「リファレンス」をご覧ください。

デバイスへのアクセスがオフになっている場合の対処方法

機密性の高いデバイスへのアプリのアクセスは、次のいずれかの理由で無効になっている場合があります。

  • ユーザーが同意のプロンプトを使ってアクセスをブロックした。
  • ユーザーが設定チャームでデバイスへのアクセスを無効にした。
  • デバイスがシステムに存在しない。

アクセスが無効になっている場合に優れたユーザー エクスペリエンスを実現するには、次の操作を行います。

  • アプリが無効になっているデバイス機能にアクセスしようとしたときに発生する API からのエラーを処理します。アプリがデバイスにアクセスできないことを示すエラーを返す場合があるメソッド呼び出しについて詳しくは、このトピックの「リファレンス」をご覧ください。
  • デバイス機能が無効になっていることを通知し、設定チャームを使ってもう一度有効にしてからアプリで機能の使用を再試行する方法について説明するメッセージをユーザーに表示します。このメッセージを表示するには、「ユーザーに通知するためのガイドライン」に従ってください。
  • ユーザーがデバイスをもう一度有効にした場合にデバイスへのアクセスを再開するための UI を用意します。この UI を使ってデバイスにアクセスするオブジェクトを再インスタンス化または再初期化します。たとえば、地図アプリに現在の位置情報を更新するためのボタンがあるとします。このボタンは新しい Geolocator オブジェクトをインスタンス化する必要があります。

デバイスが無効であることをユーザーに通知するためのガイドライン

ここでは、ユーザーが前にアクセスを許可したことがある機密性の高い機能を無効にしている場合のアプリの対応方法について説明します。この説明の目的は、ユーザーに機能を使用できないことを適切に通知し、機能をオンに戻してアプリのエクスペリエンスが損なわれないようにする方法を示すことです。

アプリで、機能がオフになっていることと、アプリの設定を使って機能を有効にできることをユーザーに通知する必要があります。

デバイスが無効になっている理由 エラー メッセージ形式のサンプル

ユーザーが同意のプロンプトまたは設定チャームを使ってアクセスをブロックした。

"<device capability> は現在無効になっています。<device capability> の設定を変更するには、設定チャームを開き、[アクセス許可] をタップします。次に、<enable action> を行い、<device capability> の使用を再開してください。"

  • <device capability> は Web カメラ、マイク、位置情報、またはテキスト メッセージングに置き換えます。
  • <enable action> は、機能へのアクセスを再初期化するためにユーザーが UI で実行する必要がある操作 (ボタンのクリックなど) に置き換えます。

デバイス機能がシステムに存在しない。

"必要な <device capability> がシステムに存在しません。"

 

無効になっているデバイス機能に関するメッセージの表示に使う UI は、そのデバイス機能がアプリにとって必須かどうかによって異なります。 次の例は、デバイス機能のメッセージの表示方法を示しています。

デバイスが必須ではない場合のポップアップまたはインライン テキストの表示

機密性の高いデバイスの使用がアプリにとって必須ではない場合は、呼び出し時にポップアップでメッセージを表示するか、控えめなインライン テキストでメッセージを表示します。

たとえば、地図アプリに現在の位置情報を表示するためのボタンがあり、必要なデバイス機能が無効になっているときにユーザーがそのボタンをクリックした場合は、アプリではボタンの近くにポップアップでエラー メッセージを表示するか、インライン テキストでエラー メッセージを表示する必要があります。

次のスクリーン ショットは、ポップアップでメッセージを表示するアプリを示しています。メッセージの内容は、"位置が見つかりません。[設定] でアクセス許可を変更して、地図が位置情報にアクセスできるようにしてください。その後、アプリを再起動します。" というものです。

Windows ストア アプリの同意プロンプト

デバイス機能が必須である場合のメッセージの表示

アプリの主な機能のためにデバイスへのアクセスが必要な場合は、エラー メッセージを表示します。

次のスクリーン ショットは、カメラ アプリがその主な機能のために Web カメラとマイクの機能へのアクセスを必要とするようすを示しています。そのため、カメラ機能を有効にするように指示するメッセージを表示します。

位置情報が必要であることをユーザーに伝えるメッセージ

無効であることを示すメッセージのその他のガイドライン

ここでは、デバイス機能が無効になっていることをユーザーに通知するためのその他のガイドラインを示します。

  • ユーザーがアプリにとって必須ではないデバイス機能を使おうとした場合は、使うことができない機能をユーザーに通知して、ユーザーが機能を使うことができないことを認識するようにします。
  • デバイスが無効であることを示すメッセージは、ユーザーに明確に表示されるようにします。
  • 機能を使うことができない場合に、その機能を使うコントロールが用意されており、その機能がアプリ機能にとって必須ではないときは、ポップアップを使います。
  • テキストがアプリのフローを妨げないようにします。
  • デバイス機能を使うことができないことをユーザーに通知するために通知を使わないでください。
  • 設定チャームの [アクセス許可] ページをプログラムを使って起動しようとしないでください。
  • ユーザーがまだ要求していないデバイス機能についてエラー メッセージを表示しないでください。たとえば、ソーシャル ネットワーキング サイトに、メッセージの投稿時に位置情報を含めるオプションがあるが、ユーザーが位置情報を共有するように選んでいない場合は、メッセージの投稿時にエラー メッセージを表示しないでください。

リファレンス

次の表に、機密性の高いデバイス機能を無効にしたりもう一度有効にしたりする場合の API の情報を示します。

機能 有効化と無効化の情報
位置情報

GetGeopositionAsync メソッドまたは PositionChanged イベントのイベント ハンドラーの追加によって同意のプロンプトがトリガーされます。

アプリでユーザーによる位置情報の無効化と再有効化を処理する方法について詳しくは、「位置認識アプリのガイドライン」をご覧ください。

地理位置情報の検出」のチュートリアルをご覧ください。

Web カメラまたはマイク

Windows.Media.Capture.CameraCaptureUI.CaptureFileAsync を使ってカメラから写真またはビデオをキャプチャするアプリでは、次の点に注意してください。

  • Windows.Media.Capture.CameraCaptureUI.CaptureFileAsync を呼び出すと、アプリを初めて実行したときに同意のプロンプトがトリガーされます。Web カメラ機能がオフになっている場合、Windows.Media.Capture.CameraCaptureUI.CaptureFileAsync はエラーを返しません。代わりに、カメラ キャプチャ UI は、Web カメラ機能がオフになっていることを示すメッセージを表示します。

Windows.Media.Capture.MediaCapture を使ってオーディオ、ビデオ、または写真をプレビューまたはキャプチャするアプリでは、次の点に注意してください。

  • MediaCapture の非同期メソッドのエラー ハンドラーは、ユーザーがアクセスを許可しなかった場合は E_ACCESSDENIED エラーを、アクセス許可が無効になっている場合は HRESULT_FROM_WIN32(ERROR_FILE_HANDLE_REVOKED) を受け取ります。
  • ユーザーが Web カメラへのアクセスを無効にした後でもう一度有効にした場合は、InitializeAsync をもう一度呼び出してカメラにアクセスします。たとえば、HRESULT_FROM_WIN32(ERROR_FILE_HANDLE_REVOKED) エラーのエラー ハンドラーが、設定チャームを使って Web カメラをもう一度有効にしてからビデオのプレビューを再開するボタンをタップするようにユーザーに指示するとします。ボタンの背後にあるコードは、他の呼び出しを行う前に InitializeAsync を呼び出す必要があります。

アプリへのマルチメディアの追加」のチュートリアルをご覧ください。

 

関連トピック

DeviceCapability element reference

アプリ機能の宣言 (Windows ストア アプリ)

パッケージ マニフェストでデバイス機能を (手動で) 指定する方法

ポップアップの使用方法

ダイアログの使用方法