位置認識アプリのガイドライン

このトピックでは、ユーザーの位置にアクセスする必要があるアプリを構築する際のパフォーマンス ガイドラインを説明します。

Windows ストア アプリがユーザーの位置を検出する方法については、位置情報のサンプルを参照してください。

アプリで位置情報を使う方法については、次をご覧ください。

推奨と非推奨

  • location オブジェクトは、アプリで位置データが必要になった場合にのみ使用を開始します。

    アプリが Geolocator オブジェクトに初めてアクセスする際には、同意のプロンプトが表示されます。これは、アプリが getGeopositionAsync を初めて呼び出すか、 positionChanged イベントのイベント ハンドラーを初めて登録することで発生します。アプリの主要目的にとって位置データへのアクセスが必要ない場合には、アプリが起動してすぐにデバイスを使うためのアクセス許可を確認するプロンプトが表示されると、ユーザーにとって紛らわしくなる可能性があります。

  • アプリで位置情報が必須でない場合は、位置情報を必要とするタスクをユーザーが完了することを試みるまではその情報にアクセスしないでください。たとえば、ソーシャル ネットワーキング アプリに、[位置情報を使ってチェックイン] というボタンがある場合、アプリは、ユーザーがそのボタンをクリックするまでは位置情報にアクセスしないようにします。アプリのメイン機能で位置情報が必要な場合は、すぐにアクセスしても問題ありません。

  • Windows 8 でのみ、ユーザーに同意のプロンプトを表示するために、Geolocator オブジェクトの初めての使用はメイン UI スレッドで行う必要があります。Geolocator の初めての使用は、getGeopositionAsync の初めての呼び出し、または positionChanged イベントのハンドラーの初めての登録にすることができます。 同意のプロンプトについては、「機密性の高いデバイスの使用のガイドライン」で詳しく説明されています。つまり、JavaScript を使うアプリでは、Geolocator オブジェクトを初めて使う際には、アクティブ化ハンドラーでこのオブジェクトを使うことはできません。

  • 位置データがどのように使われるかをユーザーに知らせてください。
  • ユーザーが現在の位置を手動で更新できる UI を用意します。
  • 位置データの取得中は、進行状況バーまたは進行状況リングを表示します。使えるプログレス コントロールとその使い方について詳しくは、「Guidelines for progress controls」をご覧ください。
  • 位置情報サービスが無効または利用不可になっている場合は、適切なエラー メッセージまたはダイアログを表示します。

    ユーザーが位置データへのアクセスを無効にしている場合、または他の理由によりアプリでデータを利用できない場合は、ユーザーに対して適切なエラー メッセージを表示します。

    • Windows でのお勧めのメッセージは、"位置情報サービスは現在無効になっています。設定チャームを使って位置情報サービスを有効にしてください" です。Windows Phone では、次のメッセージを使用できます。"位置情報はデバイスでは無効になります。位置情報を有効にするには、設定に移動して位置を選択してください。"
    • エラー メッセージがアプリのフローを妨げないようにします。位置データがアプリにとって必須ではない場合は、インライン テキストとしてメッセージを表示します。ソーシャル ネットワーキング アプリやゲーム アプリがこのカテゴリに分類されます。
    • 位置データがアプリの機能にとって必須の場合は、ポップアップやダイアログとしてメッセージを表示します。地図アプリやナビゲーション アプリがこのカテゴリに分類されます。
    • プログラムを使って設定チャームを表示しようとしないでください。

    インライン、ダイアログ、ポップアップのエラー メッセージの例については、「個人データにアクセスするデバイスのガイドライン」および「UI のレイアウト」の「エラー」をご覧ください。

  • 位置情報へのアクセスをユーザーが無効にした場合は、キャッシュされた位置データをクリアし、Geolocator オブジェクトを解放します。

    ユーザーが設定を使って位置情報へのアクセスをオフにした場合に、Geolocator オブジェクトを解放します。すると、アプリは、あらゆる位置情報 API 呼び出しの結果として ACCESS_DENIED を受け取ります。アプリで位置データを保存またはキャッシュしている場合は、ユーザーが位置情報へのアクセスを無効にするときにすべてのキャッシュ データをクリアします。位置情報サービス経由で位置データを利用できないときに位置情報を手動で入力するための代替手段を用意してください。

  • 位置情報サービスを再び有効にするための UI を用意します。たとえば、Geolocator オブジェクトを再インスタンス化して位置情報を取得し直す更新ボタンを提供します。

    位置情報サービスを再び有効にするための UI を提供する—

    • ユーザーが位置情報を無効にした後に再び有効にした場合、アプリには通知されません。status プロパティは変更されず、statusChanged イベントも発生しません。アプリで、新しい Geolocator オブジェクトを作成し、getGeopositionAsync を呼び出して更新された位置情報データを取得するか、positionChanged イベントの受信登録をもう一度行います。位置情報が再び有効になったことを確認できたら、位置情報サービスが無効であることをユーザーに通知するために表示していた UI をクリアし、新しい状態に対して適切に対応します。
    • アプリをアクティブ化するとき、位置情報が必要な機能をユーザーが明示的に使おうとしたときなど、状況に応じて必要と思われる任意の時点で、位置情報データを取得し直すことをお勧めします。

パフォーマンス

  • アプリで位置情報の更新を受け取る必要がない場合は、位置情報の要求を 1 回だけ使います。たとえば、写真に位置情報タグを追加するアプリでは、位置情報更新イベントを受け取る必要はありません。このようなアプリでは、getGeopositionAsync を使って位置情報を要求します。詳しくは、「ユーザーの位置の検出」をご覧ください。

    1 回限りの位置情報の要求を行う場合は、次の値を設定する必要があります。

    • DesiredAccuracy または DesiredAccuracyInMeters を設定して、アプリから要求される精度を指定します。これらのパラメーターを使用する場合の推奨事項については、以下をご覧ください
    • GetGeopositionAsync の最大保存期間のパラメーターを設定して、アプリで有用な位置情報を取得できる期間を指定します。アプリで数秒または数分前の位置を使用できる場合は、ほとんどすぐに位置を受け取って、デバイスの電力を節約することができます。
    • GetGeopositionAsync のタイムアウト パラメーターを設定します。これが、アプリが返される位置またはエラーを待機することができる長さです。ユーザーへの応答性とアプリが必要とする精度のバランスを理解する必要があります。
  • 頻繁に位置を更新する必要がある場合は、連続的な位置情報のセッションを使います。特定のしきい値を超えた移動を検出する場合、または発生時に絶えず位置情報の更新を取得する場合は、positionChanged イベントと statusChanged イベントを使います。

    位置情報の更新を要求すると、DesiredAccuracy または DesiredAccuracyInMeters を設定して、アプリから要求される精度を指定する必要があります。また、MovementThreshold または ReportInterval を使って、位置情報の更新が必要な頻度を設定する必要があります。

    • 移動しきい値を指定します。アプリによっては、ユーザーの移動距離が大きいときにだけ位置情報を更新すれば済むものがあります。たとえば、地域のニュースや天気予報の更新情報を提供するアプリでは、ユーザーの位置が別の都市に変わらない限り位置情報を更新する必要はありません。このような場合は、MovementThreshold プロパティを設定して、位置情報更新イベントの発生条件となる最小の移動距離を調整します。このプロパティには PositionChanged イベントをフィルター処理する効果があります。これらのイベントは、位置の変化が移動しきい値を超えたときにのみ発生します。

      Windows では、MovementThreshold プロパティを設定しても、位置データの提供元 (Windows 位置情報取得機能や接続された GPS デバイスなど) で位置情報が計算される頻度は変わりません。Windows Phone では、移動の予想速度などのその他の要因と共に MovementThreshold プロパティを使って、デバイスの電力を節約するために、システムで計算される位置情報の頻度を調整します。

    • アプリのエクスペリエンスと整合し、システム リソースの使用が最小限に抑えられる reportInterval を使います。 たとえば、天気予報アプリでは、15 分ごとにデータを更新するだけでよいと思われます。リアルタイムのナビゲーション アプリを除くほとんどのアプリでは、位置情報の更新について、高い精度のストリームを常に必要とするわけではありません。最大限の精度のデータ ストリームを必要としない場合や、頻繁に更新する必要がない場合は、ReportInterval プロパティを設定して、アプリで位置情報を更新する必要がある最小の頻度を指定します。これにより、必要なときにだけ位置情報を計算することで、位置情報の提供元の電力を節約できます。

      リアルタイムのデータを必要とするアプリでは、最短の間隔を指定せずに、ReportInterval を 0 に設定する必要があります。Windows では、レポート間隔が 0 の場合、アプリは最も精度が高い位置情報の提供元から送られる頻度でイベントを受け取ります。Windows Phone では、アプリから要求された精度に依存するで速度で更新を取得します。

      位置データを提供するデバイスでは、さまざまなアプリから要求されるレポート間隔を追跡し、要求された最短の間隔でデータをレポートする場合があります。これにより、精度の要件が最も高いアプリに必要なデータを提供できます。そのため、別のアプリで要求された更新頻度の方が高い場合は、要求した頻度よりも頻繁に更新が生成されることがあります。

        位置情報の提供元からのレポート間隔は、必ずしも要求どおりになるとは限りません。 位置情報取得機能デバイスによってはレポート間隔を追跡しないものもありますが、追跡されるものとして指定しておくことをお勧めします。
    • 電力を節約するには、desiredAccuracy プロパティを設定して、アプリで高い精度のデータが必要かどうかを位置情報プラットフォームに示します。高い精度のデータを必要とするアプリがなければ、GPS 位置情報取得機能を無効にして電力を節約できます。

      • GPS でデータを取得するには、desiredAccuracyHIGH に設定します。
      • ターゲティング広告のためにのみ位置情報を使うアプリは、消費電力を最小限に抑えるため、desiredAccuracyDefault に設定します。

      精度についてアプリに特定のニーズがある場合は、DesiredAccuracy を使う代わりに DesiredAccuracyInMeters プロパティを使うこともあります。これは、通常、位置情報を移動体通信ビーコン、Wi-Fi ビーコンや衛星に基づいて取得できる Windows Phone に特に役立ちます。より具体的な精度値を選ぶと、システムが位置情報を提供する際に最も低い消費電力で適切なテクノロジを識別するために役立ちます。

      たとえば、次のような場合があります

      • アプリが広告の調整、天気、ニュースなどのための位置情報を取得している場合は、一般に 5000 m の精度で十分です。
      • アプリが地域内のごく近隣を表示する場合は、結果の表示には一般に 300 m の精度が適しています。
      • ユーザーがお勧めの近くのレストランを探している場合は、ブロック内の位置を取得する必要がありますので、100 m の精度で十分です。
      • ユーザーが自身の位置を共有しようとしている場合は、アプリには約 10 m の精度が必要です。
    • アプリに特定の精度の要件がある場合は Geocoordinate.accuracy プロパティを使います。たとえば、ナビゲーション アプリでは、Geocoordinate.accuracy プロパティを使って、利用可能な位置情報データがアプリの要件を満たしているかどうかを調べます。

  • 起動時の待ち時間を考慮します。アプリで初めて位置データを要求したとき、位置情報取得機能が起動するまでに 1 ~ 2 秒の待ち時間が発生することがあります。アプリの UI を設計するときは、この点に注意してください。たとえば、GetGeopositionAsync の呼び出しを保留している他のタスクがブロックされないようにしてください。

  • バックグラウンドの動作を考慮します。Windows ランタイム アプリにフォーカスがない場合、バックグラウンドで中断されている間は位置情報更新イベントを受け取りません。位置情報の更新をログに記録して追跡する場合は、この点に注意してください。アプリにフォーカスが戻った後は、新しいイベントだけを受け取ります。アプリが非アクティブだったときに発生した更新は取得されません。

  • ロー センサーとフュージョン センサーを効率的に使います。 Windows 8 では、ローフュージョンの 2 種類のセンサーがサポートされます。

    • ロー センサーには、加速度計、ジャイロメーター、磁力計が含まれます。
    • フュージョン センサーには、向き、傾斜計、コンパスが含まれます。フュージョン センサーは、ロー センサーの組み合わせからデータを取得します。
    Windows ランタイム  API は磁力計以外のすべてのセンサーにアクセスできます。 フュージョン センサーの方がロー センサーよりも正確で安定していますが、より多くの電力を使います。用途に適したセンサーを使う必要があります。詳しくは、「使用に適したセンサーの選択」をご覧ください。

コネクト スタンバイ:  Windows のみ。PC がコネクト スタンバイ状態にある場合、Geolocator オブジェクトはいつでもインスタンス化できます。しかし、Geolocator オブジェクトは集約する対象のセンサーを見つけることができず、GetGeopositionAsync の呼び出しは 7 秒後にタイムアウトします。PositionChanged イベント リスナーの呼び出しは行われず、StatusChanged イベント リスナーは 1 回呼び出され、そのステータスは NoData となります。

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

位置情報設定の変更を検出する

Windows では、位置情報機能は、設定チャームやコントロール パネルを使ってユーザーが無効にできるようになっています。位置情報の設定を変更する UI について詳しくは、「位置情報の設定」をご覧ください。Windows Phone では、ユーザーは設定アプリで位置情報を使用できないようにすることができます。ユーザーによる設定変更の処理についての設計ガイダンスは、「機密性の高いデバイスの使用のガイドライン」をご覧ください。

  • ユーザーが位置情報サービスを無効にしたり再び有効にしたことを検出するには、次の操作を行います。
    • StatusChanged イベントを処理します。StatusChanged イベントの引数である Status プロパティの値は、ユーザーが位置情報サービスを無効にすると Disabled になります。
    • GetGeopositionAsync から返るエラー コードをチェックします。ユーザーによって位置情報サービスが無効にされている場合、GetGeopositionAsync の呼び出しは ACCESS_DENIED エラーで失敗し、LocationStatus プロパティの値は Disabled になっています。
  • 地図アプリのような、位置情報データが必須のアプリの場合は、必ず次の操作を実行してください。

位置情報 API は、データが利用可能になったときにデータを返します。最初に誤差の範囲が大きい位置情報を返し、より正確な情報が利用可能になったときに位置情報を更新する場合があります。ユーザーの位置情報を表示するアプリでは、通常、より正確な情報が利用可能になったときに位置情報を更新する必要があります。

位置情報のグラフィック表示

アプリでは、Geocoordinate.accuracy を使って、ユーザーの現在の位置情報を地図に明確に示すようにします。精度の幅は、主に、誤差の範囲が半径約 10 m、半径約 100 m、半径 1 km 超、という 3 種類があります。精度情報を使うことにより、アプリでは、利用可能なデータの状況に応じて位置情報を正確に表示することができるようになります。

  • 約 10 m 相当の精度 (GPS の解像度) の場合、位置情報は点またはピンで地図上に示すことができます。この精度では、経度と緯度の座標、住所の番地も表示できます。

    約 10 m の GPS 精度で表示される地図の例。

  • 10 ~ 500 m (おおよそ 100 m) の精度の場合、位置情報は通常、Wi-Fi による解決で受信されています。移動体通信から取得した位置情報は約 300 m の精度です。この場合、アプリでは誤差を含む範囲を表示することをお勧めします。道順を表示するアプリなど中心点が必要となる場合は、その中心点を誤差を表す範囲で囲むことができます。

    約 100 m の Wi-Fi 精度で表示される地図の例。

  • 戻される精度が 1 km より大きい場合は、IP レベルの解決で位置情報を受信することになります。多くの場合、地図上に特定の地点をピンポイントで表示するためにはこのレベルの精度は低すぎます。アプリではピンや円で地理的な場所を表現することは控え、その代わりに、地図を市のレベルまで、または誤差の範囲に応じて適切なエリア (たとえば、地域のレベル) までズームすることをお勧めします。

    約 1 km の Wi-Fi 精度で表示される地図の例。

位置情報の精度が別の精度に切り替わるときは、異なるグラフィック表示が適切に遷移するようにします。このためには、次のようにします。

  • 切り替え時のアニメーションをスムーズにし、切り替えを高速かつ滑らかに保ちます。
  • 数回の連続的な報告があるのを待ってから、精度が変わったと判断します。これにより、不要なズームが頻繁に行われるのを防ぐことができます。

位置情報のテキスト表示

天気アプリや地域情報アプリなどアプリの種類によっては、さまざまな精度の位置情報をテキストで表現することが必要になります。位置情報は、データが提供する精度レベルまでに抑えて、明確に表示するようにします。

  • 精度が約 10 m 相当 (GPS の解像度) の場合、受信した位置情報データは相当に正確であるので、ごく近隣の地名のレベルで情報を伝えることができます。市の名前、都道府県の名前、国/地域の名前も使うことができます。
  • 精度が約 100 m 相当 (Wi-Fi の解像度) の場合、受信した位置情報データはある程度正確です。市の名前までの情報を表示することをお勧めします。それより詳しい、近隣地域の地名の使用は避けてください。
  • 1 km 超の精度 (IP による解決) の場合は、都道府県の名前、または国/地域の名前のみ表示します。

プライバシーに関する考慮事項

ユーザーの地理的な位置情報は、個人を特定できる情報 (PII) に当たります。ユーザーのプライバシーの保護に関するガイダンスについては、次の Web サイトをご覧ください。

関連トピック

開発者向け (HTML)
地理位置情報の検出 (JavaScript と HTML を使った Windows ストア アプリ)
Windows.Devices.Geolocation
機密性の高いデバイスの使用のガイドライン
開発者向け (XAML)
地理位置情報の検出 (C#/VB/C++ と XAML を使った Windows ストア アプリ)
Windows.Devices.Geolocation
機密性の高いデバイスの使用のガイドライン
サンプル
位置情報のサンプル

 

 

表示:
© 2015 Microsoft