iOS7で位置情報サービスを使う場合のUX設計上の配慮

iOSで地図やGPSを利用する場合には、CoreLocationフレームワークを利用します。
利用すること自体はとても簡単なのですが、利用を開始するに至るまでのシーンで、UX上、考慮すべき点がいくつかありました。

1. 利用可能なiOS端末を絞り込む

CoreLocationフレームワークで利用出来る位置情報サービスには、その精度に応じて2段階あります。

 1. 一般的な精度
 2. GPSを使った高い精度

GPSを使った高い精度の位置情報サービスを利用するには、GPSが搭載されているiPhoneiPadである必要があります。(iPod touchにはGPS搭載モデルはありません)

上記の精度は、アプリケーションのInfo.plistファイルにUIRequiredDeviceCapabilitiesキーを追加することで指定出来ます。

 1. 文字列location-servicesを指定します
 2. 文字列gpsを指定します

  

App Storeは、このキーの情報を使用して、リストに含まれている機能のないデバイスへのアプリケーションのダウンロードを防ぎます。

2. 位置情報サービスの機能がオンになっているかどうか確認する

位置情報サービスは、以下の3通りの方法でオフにすることが出来ます。

 方法1 位置情報サービス全体をオフにする
 方法2 個別のアプリケーションに対してのみ、位置情報サービスをオフにする
 方法3 機能制限により位置情報サービスをオフにする

方法1や方法2はおなじみかと思いますが、方法3は今回改めてリファレンスを読んで確認しました。
iOSバイスを子供などに持たせる場合に使う「機能制限」ですが、その中にも個別に位置情報サービスがありました。

  

位置情報サービスがオンになっているかどうかを確認する手段は、CoreLocationフレームワークでは2種類提供されています。

 (A) (BOOL) [CllocationManager locationServicesEnabled]
 (B) (CLAuthorizationStatus)[CllocationManager authorizationStatus]

どちらもクラスメソッドなので、インスタンスを生成する必要も無く利用出来ます。
(A)では、方法1、方法2、方法3の区別が出来ず、とにかく位置情報サービスが利用出来るか否か、ということが判定出来ます。
どのような方法で位置情報サービスがオフになっているかを判別したい場合は、(B)のメソッドを利用することになります。

アプリケーションで位置情報サービスを利用する際には、(A)または(B)の方法で確認してから使うようにすると、間違いが無くていいですね。

さらには、位置情報サービスがオフになっている場合に、オンにすることをユーザーに促すことが出来れば、ユーザーの戸惑いも減りそうです。

3. 位置情報サービをオンにするように促す方法について(教えてください)

以上を踏まえて、ここからが本エントリーの本題となります。

標準アプリの「マップ」では、位置情報サービスがオフになっている時に「現在地を表示」ボタンをタップすると、下記のダイアログが表示されます。

  

このダイアログは「設定」ボタンをタップすることで設定アプリの位置情報サービス画面を直接開くことが出来るため、設定を変更したいユーザーにとってはとても便利です。

しかしながらこの、設定アプリの特定の画面を開くことは、iOS 5.0まではその方法が公開されていたのですが、iOS 5.1以降は非公開となってしまい、アプリケーションから直接開くことは出来なくなってしまいました。

色々と試行してみたのですが、現状では(iOS 7.1 beta2)標準アプリと全く同じダイアログをプログラム的に作成することは不可能なようでした。

ただし、位置情報サービスがオフになっている時にCLLocationManagerのstartUpdatingLocationを呼び出すと、標準アプリと同じダイアログが表示される「場合もある」ことは分かりました。

今のところ、どのような場合どのような条件で表示されるのか分かっていないので、これに頼ることは止めて、(A)や(B)の方法で確認した上で、独自のダイアログを表示させることとしました。ほんとは「設定」ボタン付きのダイアログをつくりたいんですけど。。

参考に、と思ってGoogleGoogle Mapアプリを確認してみたところ、やはりGoogleも独自ダイアログ(「設定」ボタン無し)だったので、今のところこのアプローチしか無いようです。

  

標準アプリの「マップ」が表示している「設定」ボタン付きのダイアログをプログラム的に生成する方法について、ご存知の方がいらっしゃいましたらご教示をお願いします。