個人データにアクセスするデバイスのガイドライン

マイク、カメラ、位置情報取得機能、テキスト メッセージ サービスは、ユーザーの個人データへのアクセス、またはユーザーへの課金を行うことがあります。そのため、機密性の高いデバイスであると考えられます。 Windows ストア アプリは、こうした機密性の高いデバイスにアクセスを許可するアプリをユーザーが制御できる機能を備えています。このトピックでは、デバイス アクセスを有効または無効にする方法を説明する箇所を設けるように Windows ストア アプリを設計するガイドラインについて説明します。

Windows ストア アプリが機密性の高いデバイスを使うためのアクセス許可は、アプリごと、ユーザーごとに制御します。ユーザーは、同意のプロンプトを使うか設定チャームを使ってアクセス許可を制御します。次の図は、同意のプロンプトに関連付けられた UI と設定ウィンドウの [アクセス許可] セクションを示しています。

同意のプロンプト

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

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

設定チャーム

各アプリから機密性の高いデバイスへのアクセスは、設定チャームを使って制御することもできます。設定チャームをタップし、設定ポップアップを開きます (SettingsPane)。設定チャームは、以下の画像に示すように、アプリの右側にあります。

設定チャーム

あらゆる Windows ストア アプリに既定で [アクセス許可] ポップアップが用意されています。ユーザーが設定ウィンドウで [アクセス許可] をクリックすると、[アクセス許可] ポップアップが表示され、アプリからの機密性の高いデバイス機能へのアクセスを有効または無効にできます。天気予報アプリの [アクセス許可] ポップアップを次に示します。

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

推奨と非推奨

  • ユーザーに同意のプロンプトを表示するために、機密性の高いデバイスを使い始めるための最初の呼び出しはメイン UI スレッドで行う必要があります。同意のプロンプトが表示されない場合、ユーザーはアプリにデバイスへのアクセスを付与できません。次のことを確認してください。
    • デバイスを初めて使うときに、アプリでバックグラウンド タスクを使わないでください。
    • JavaScript と HTML を使うアプリでは、デバイスにアクセスするオブジェクトを初めて使う際、アプリのアクティブ化ハンドラーでそのオブジェクトを使わないでください。
    • C#/VB/C++ と XAML を使うアプリでは、デバイスにアクセスするオブジェクトを初めて使う際、App.xaml.cs ではなく、MainPage.xaml.cs でそのオブジェクトを使います。
  • 機密性の高いデバイスの使用がアプリの一部のタスクでのみ必須である場合は、ユーザーがそれらのタスクを実行するまでデバイスにアクセスしないでください。たとえばソーシャル ネットワーキング アプリに、"位置情報を使ってチェックイン"や"プロフィール写真を撮る"ためボタンがある場合、このアプリでは、ユーザーが対応するボタンをクリックするまで位置情報やカメラにアクセスしないようにします。
  • アプリの主な機能のために機密性の高いデバイスへのアクセスが必要な場合は、アプリの起動時にデバイスにアクセスします。たとえば、ライブビデオをキャプチャするアプリでは、その主な目的のためにカメラが必要です。この場合、デバイスへのアクセスを即座に要求することが適切です
  • 設定ウィンドウの [アクセス許可] ページをプログラムを使って起動しないでください。

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

デバイスへのアクセスが無効になる可能性があるのは、同意を求めるメッセージに対してユーザーが同意を拒否した場合、ユーザーが設定ウィンドウの [アクセス許可] ポップアップでアクセスをブロックした場合、またはデバイスがシステムに存在しない場合の 3 つ場合です。アプリが機密性の高いデバイスにアクセスできない場合は、次の推奨事項に従ってください。

  • ユーザーがデバイスを使おうとしたときは、デバイス機能を利用できないことをユーザーに通知します。ユーザーが機能を使うことができないことを認識する必要があります。
  • デバイスが無効であることを示す通知は、ユーザーに明確に表示されるようにします。
  • アプリの主な機能に必要な機能ではない場合、ポップアップまたはインライン メッセージを使ってユーザーに通知します。
  • アプリが無効になっているデバイス機能にアクセスしようとしたときに発生する API からのエラーを処理します。アプリがデバイスにアクセスできないことを示すエラーを返す場合があるメソッド呼び出しについて詳しくは、このトピックの「リファレンス」をご覧ください。
  • デバイス機能が無効であることを通知し、設定ウィンドウの [アクセス許可] ポップアップからもう一度有効にする方法について説明するメッセージをユーザーに表示します。デバイスが無効であることをユーザーに通知する方法の例については、「その他の使い方のガイダンス」をご覧ください。
  • ユーザーがデバイスをもう一度有効にした場合にデバイスへのアクセスを再開するための UI を用意します。この UI を使ってデバイスにアクセスするオブジェクトを再インスタンス化または再初期化します。たとえば、地図アプリに現在の位置情報を更新するためのボタンがあるとします。このボタンは新しい Geolocator オブジェクトをインスタンス化する必要があります。
  • デバイス機能を利用できないことをユーザーに通知するために通知を使わないでください。
  • ユーザーがまだ要求していないデバイス機能についてエラー メッセージを表示しないでください。たとえば、ソーシャル ネットワーキング サイトに、ユーザーがメッセージを投稿するときに位置情報を含めるオプションがあるが、ユーザーが位置情報を共有するように選んでいない場合は、メッセージの投稿時にエラー メッセージを表示しないでください。

その他の使い方のガイダンス

エラー メッセージのサンプル

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

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

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

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

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

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

 

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

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

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

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

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

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

デバイス機能が必須である場合のダイアログの表示

アプリの主な機能のためにデバイスへのアクセスが必要な場合は、MessageDialog を使ってエラー メッセージを表示します。完全なサンプルについては、「メッセージ ダイアログのサンプルのページ」をご覧ください。

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

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

リファレンス

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

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

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

アプリでユーザーによる位置情報の無効化と再有効化を処理する方法について詳しくは、「Guidelines for location-aware apps」をご覧ください。

詳しい手順とコード例については、「地理位置情報の検出 (JavaScript と HTML を使った Windows ストア アプリ)」または「地理位置情報の検出 (C#/VB/C++ と XAML を使った Windows ストア アプリ)」をご覧ください。

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 を呼び出す必要があります。

Windows.Media.Capture の使い方については、「アプリへのマルチメディアの追加 (JavaScript と HTML を使った Windows ストア アプリ)」または「アプリへのマルチメディアの追加 (C#/VB/C++ と XAML を使った Windows ストア アプリ)」のチュートリアルをご覧ください。

IAudioClient2 インターフェイスを使うアプリでは、ActivateAudioInterfaceAsync の呼び出しによって同意のプロンプトがトリガーされることに注意してください。

 

関連トピック

開発者向け (HTML)
DeviceCapability
MessageDialog
アプリ機能の宣言 (Windows ストア アプリ)
パッケージ マニフェストでデバイス機能を手動で指定する方法
Quickstart: Adding a flyout
開発者向け (XAML)
DeviceCapability
MessageDialog
アプリ機能の宣言 (Windows ストア アプリ)
パッケージ マニフェストでデバイス機能を手動で指定する方法
ポップアップとメニューの追加
サンプル
メッセージ ダイアログのサンプルのページ

 

 

表示:
© 2015 Microsoft