ランタイム権限のリクエスト
Request permission to use device features or access private data outside of the application sandbox.
読み終わるまでの所要時間 10 分最終更新 1ヶ月前
このページでは、アプリケーションがデバイスのデータにアクセスする、またはデバイス機能 (ビルトインのカメラやマイクなど) を使用するための権限をユーザーにリクエストする方法を説明します。
権限のリクエストに関する Google のガイドラインでは、ユーザーが権限のリクエストを一旦拒否した場合は、リクエストの理由を表示し、リクエストを再度提示することを推奨しています。
Android デバイスで権限をリクエストするタイミングと方法に関する詳細については、Android のデベロッパー向けガイドでアプリの権限に関するベストプラクティスを参照してください。
必要な要件
ランタイム権限 API を使用するには、Android バージョン 6 (API レベル 23) が必要です。アプリケーションのターゲット API の変更は、以下の手順で行ってください。
-
Edit > Project Settings を選択します。
-
Project Settings ウィンドウで、Player タブを選択し、Android Player Settings を開きます。

-
Other Settings > Identification セクションで、Target API Level を level 23 以上に設定してください。
アプリケーションは、制限付きデータや特定のデバイス機能の使用権限をリクエストするにあたって、事前にその Android アプリマニフェストで権限を宣言する必要があります。詳細については、アプリケーションの権限の宣言を参照してください。
実行時の権限のリクエスト
Android.Permission API は、アプリケーションに現在付与されている権限の確認や、アプリケーションが必要とするもののまだ付与されていない権限のリクエストに使用できる機能を提供します。
実行時の権限をリクエストする大まかなプロセスは、以下の通りです。
- アプリケーションの権限がすでにユーザーによって付与されているかどうかを確認します。付与されている場合は再度リクエストする必要はありません。
- ユーザーが権限を付与していない場合は、権限をリクエストする理由を表示する必要があるかどうかを確認します。理由が必要ない場合は、データにアクセスする、またはアプリケーションに必要なデバイス機能を使用するための権限のリクエストを直接送信します。
- ユーザーがアプリケーションへの権限付与を拒否する場合は、特定の権限を必要とするアプリケーションの機能を無効にします。その機能がないとアプリケーションが動作できない場合は、ユーザーに通知してください。
- それでもユーザーがアプリケーションへの権限付与を拒否する場合は、ユーザーがアプリケーション内から手動で権限リクエストを手動でトリガーできる方法を提示することをお勧めします。
アプリケーションが権限を持っているかの確認
Permission.HasUserAuthorizedPermission を使用して、アプリケーションが必要とするデータや機能に関する権限が、すでにユーザーによって付与されているかどうかを確認します。
この API の使用方法を示すコードサンプルについては、Permission.HasUserAuthorizedPermission を参照してください。
権限リクエストの理由を表示するかどうかを確認します
Permission.ShouldShowRequestPermissionRationale を使用して、特定の権限リクエストの理由を表示する必要があるかどうかを確認します。
理由が必要な場合は、アプリケーションが特定のデバイス機能へのアクセスを必要とする理由とともにメッセージを表示します。メッセージを表示したら、権限に関するリクエストを送信します。
理由が必要ない場合は、直接権限リクエストの送信に進みます。
この API の使用方法を示すコードサンプルについては、Permission.ShouldShowRequestPermissionRationale を参照してください。
権限リクエストの送信
Permission.RequestUserPermission を使用して、データまたは機能の使用権限をリクエストします。このメソッドを呼び出すと、Android によってシステム権限ダイアログが開かれ、ユーザーはこれを使用して権限を付与するか、権限の付与を拒否できます。
この API の使用方法を示すコードサンプルについては、Permission.RequestUserPermission を参照してください。
Permission.RequestUserPermissions を使用すると、ユーザーデバイス上の複数のリソースへのアクセス権限を一度にリクエストできます。このメソッドは文字列の配列を使用しており、各文字列が特定のリソース (デバイスのカメラ、マイク、位置情報など) へのアクセス権限を表します。
これらのメソッドは、ユーザーが権限を付与または権限の付与を拒否した後に実行するコードの指定に使用できる、PermissionCallbacks オブジェクトを受け取ることができます。これを使用すると、権限リクエストがユーザーによって承認されると同時にデバイス機能の使用を開始できます。例えば、マイクからの録音を開始できます。
ヒント: 権限をリクエストする際には、ユーザーに対して、アプリケーションがなぜその機能を必要とするのかを説明するメッセージを表示することが推奨されます。
ノート: ユーザーがシステム権限ダイアログで Do not ask me again オプションを有効にしている場合、または権限について複数回拒否している場合、 はシステムダイアログを開きません。この場合、ユーザーはアプリケーション権限設定に移動し、手動で権限を有効にする必要があります。
RequestUserPermission()権限リクエストを手動で起動する方法の提供
アプリケーションが必要とする権限をユーザーが許可しなかった場合は、手動で権限リクエストダイアログを表示する方法をユーザーに提示してください。これをどのように行うかはアプリケーションによって異なりますが、Permission.RequestUserPermission を呼び出すためのボタンを配置するのも 1 つの方法です。