はじめに
こんにちは、プロダクト開発部の山田です。 FANSHIP を利用する際にアプリに組み込む Android SDK の開発を主に担当しております。
Android SDK はアプリに組み込んでいただくとプッシュ通知の受け取りがすぐに可能となりますが、位置情報を利用してプッシュ通知を受け取るといったことも可能となっております。
今回はこの Android で位置情報を利用する際に必要となる、権限周りについて少しまとめてみたいと思います。
権限について
Android では位置情報の権限は OS のバージョンによって少し内容が変わってきます。 その内容について、各バージョン毎に触れていきます。
Android 5 まで
少し昔の端末となりますが、このバージョンの OS については、 アプリのインストールを行う際に必要な権限が表示され、インストールを行った時点で権限が許諾された状態となっております。 また、インストールされた後に権限の変更等も行えない仕様となっておりました。
Android 9 まで
Android 6 以降では 権限の許可・拒否 が選択できるようになり、拒否されている状態では位置情報の利用ができなくなっております。 アプリのインストールを行った時点では位置情報は許可されておらず、ユーザーに許可をしてもらうためにアプリから 許諾ダイアログ を表示して、許諾を得るというプロセスが必要となりました。
Anroid 10 について
Android 10 からは位置情報の利用に大きく変更が入りました。
位置情報の利用には ACCESS_FINE_LOCATION
という権限を利用しますが、これに加えて ACCESS_BACKGROUND_LOCATION
という権限が追加されました。
名前の通りなのですが、ACCESS_BACKGROUND_LOCATION
はアプリがバックグラウンドの際に位置情報を取得するためのものです。
これを宣言しなかった場合、許諾ダイアログ、及び設定画面では下記のように アプリの使用中のみ許可
しか選択できません。
ACCESS_BACKGROUND_LOCATION
を宣言をすることで、下記のように初めて 常に許可
という選択肢が出現します。
補足 :
ACCESS_BACKGROUND_LOCATION
の権限を宣言していても、許諾のリクエストで ACCESS_FINE_LOCATION
のみを指定した場合は 常に許可
は選択肢として出現しません。
許諾のリクエスト時、 ACCESS_BACKGROUND_LOCATION
と ACCESS_FINE_LOCATION
を同時にリクエストすることで、初めて 常に許可
が出現します。
Android 11 について
Android 11 では Android 10 より、さらに厳しい制約が入っております。
このバージョンからは許諾のリクエストで 常に許可
の選択ができなくなりました。
また、それに加えて 今回のみ
という選択肢が増えております。
画像にあります 許諾ダイアログ① と 許諾ダイアログ② についての違いはアプリに指定した targetSdkVersion
によって変わってきます。
許諾ダイアログ① は targetSdkVersion 29 以下
で ACCESS_FINE_LOCATION
と ACCESS_BACKGROUND_LOCATION
を同時にリクエストしたものとなります。
通常の選択肢の他に 設定で許可してください
という文言が追加され、クリックすると設定画面の権限ページへ直接飛ぶことができます。
許諾ダイアログ② は ACCESS_FINE_LOCATION
のみをリクエストした状態となります。
targetSdkVersion 30 以上
で ACCESS_FINE_LOCATION
と ACCESS_BACKGROUND_LOCATION
を同時にリクエストしたら アプリがクラッシュする ように変更されているので、ご注意ください。
※ Android 11 では targetSdkVersion 30 以上
で ACCESS_BACKGROUND_LOCATION
をリクエストすると、設定画面の権限ページへ直接飛べるようになっております
おわりに
今回は権限と許諾について、簡単にですがまとめさせていただきました。 位置情報については最近ではセキュリティやプライバシー等、扱いが難しくなっております。 実際に、Google ではバックグラウンドで位置情報を利用するアプリを申請する際、かなり審査が厳しくなっています。
こういった厳しさもある反面、位置情報というデータを活用すればアプリもよいものとなりますので、今後も上手く利用できればと思います。