久々にAndroidの話。
tl:dr
忌まわしき位置情報の権限
Androidの話なので、iOSユーザーの方はポカーンって感じかもしれないですが。
Androidはユーザーのプライバシーを守るために、Android 6からRuntime Permissionsを実装し、アプリがスマホの一部のリソースを使う前に、アプリがユーザーに対して権限の付与を尋ねるという機能が入りました。
たとえば、地図アプリや、アプリでどこかのスポットにチェックインしたりするときなど、アプリがスマホの位置情報をアクセスする際は、予めユーザーに対して位置情報へのアクセスを許可してもらう必要があり、許可がおりて初めて位置情報にアクセスできるようになります。
ただし、ここでポイントなのは、Bluetooth(BLE)やWi−Fiのスキャンをする際も位置情報アクセスの権限取得が何故か必要ということです。Android側のロジックとしては、BLEビーコンやWi−Fiのアクセスポイントのスキャン結果とそれぞれの電波強度から位置情報が推測できるため、そのような制約を設けていると思われるのですが、アプリを使っているユーザーからは、そんな内部の都合なんて理解できるはずがありません。
結果として、アプリとしては位置情報がほしいわけでもないのにBLEやWi− Fiを使う際は、ユーザーに対して位置情報へのアクセス権限を求めざるを得ず、ユーザーにとってみれば、なぜ位置情報へのアクセスを求められているのかがわからず、変に怪しまれるということが多々あったわけです。
ようやくAndroid 12で仕様が変わります
この状況が2021年秋にリリースされるAndroid 12で大きくかわります。
Android 12では、新たにBluetooth利用のための権限が2つ新設されます。
これにより、今までAndroidManifest.xmlで、
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
のように宣言していた位置情報アクセスの権限でしたが、BLEのスキャンと接続をするだけであれば、上記の権限は不要で、
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
というように、専用の権限利用の宣言だけをすれば良くなりました。ユーザーの見た目的にもBLE利用の際に求められる権限は、
Allow [an app] to find, connect to, and determine relative position of nearby devices.
のような、わかりやすい理由で権限を求められるようになります。
戦いはこれで終わりなのか?
というわけで、新しいOSでは、BLE利用と位置情報利用のための権限が分かれたことで、ユーザーフレンドリーな仕様に一歩近づいたわけです。
ただし、これはあくまでもAndroid 12のデバイスで動作するアプリの話であって、依然として大多数を占めるAndroid 11以下のデバイスでは関係ない話です。
なので、アプリデベロッパーとしてはぬか喜びすることなく、当面の間はAndroid 12で増えた権限のハンドリングをしつつ、Android 11以下のデバイスを考慮した設計が必要になりそうです。悲しいかな、デベロッパーの諸兄姉は目をつぶっていてもif文を無限にコーディングできるスキルを持っているはずなので、容易い話かと思いますが。
一方でユーザーも、急にアプリが位置情報の権限を要求してきても焦らずに、許可・不許可をする必要があります。もしかしたら、Bluetoothを使いたいだけなのに位置情報の権限を要求しているのかもしれません。(まぁ、そういうときは、アプリはその旨をユーザーに伝えるべきですが)位置情報に限らずそのような権限はあとからでも不許可に倒すことも可能なので、脳死で許可・不許可をせずに、冷静に考えて決めてほしいなと願っています。
でも、あんまり不許可にしないでね!もしかしたらバグるかもしれないから!(笑)
- 作者:深見 浩和
- 発売日: 2017/09/27
- メディア: 単行本(ソフトカバー)