いくつかの主要なデバイス機能(通話履歴の読み取りや SMS メッセージの送信)は、ユーザーの機密情報へのアクセスに依存します。ユーザーのプライバシーを保護し、ユーザーがデバイス上のアプリに提供する情報をユーザー自身がよりきめ細かく管理できるようにするため、Google Play では通話またはメッセージに関連する権限グループに対するアプリのアクセスを制限しています。
アプリを Google Play ストアで配布し、通話履歴と SMS メッセージに関連するユーザーの機密情報にアクセスするには、アプリが、該当の権限に関連する主要なデバイス機能に対するユーザーのデフォルト ハンドラとして登録されている必要があります(ただし、アプリが Play Console ヘルプセンターに表示される例外ケースのいずれかに該当する場合を除きます)。たとえば、通話関連の権限にアクセスするには、例外ケースに該当する場合を除いて、アプリはユーザーのデフォルトの通話ハンドラまたはアシスタント ハンドラとして登録されている必要があります。
このガイドでは、Android 搭載デバイスでユーザーがデフォルト ハンドラにアクセスする方法を簡単に説明します。次に、アプリがデフォルト ハンドラになるために満たす必要がある要件を確認します。最後に、アプリがデフォルト ハンドラになるためにユーザーの同意を得る手順を説明します。
デフォルト ハンドラの詳細と、Google Play ストアで入手可能なアプリで権限を処理する方法については、権限ポリシーガイドをご覧ください。
デフォルト ハンドラのセットを表示して変更する
Android では、通話の発信、SMS メッセージの送信、支援技術機能の提供など、いくつかの主要なユースケースに対応するデフォルト ハンドラを、ユーザーが設定できるようになっています。
図 1 に示すように、Android の設定アプリには、現在どのアプリがデバイスの主要な機能のデフォルト ハンドラであるかを表示する画面があります。図 2 に示すように、ユーザーはこの画面から特定の機能のデフォルト ハンドラを変更できます。
デフォルト ハンドラとしての要件を満たす
アプリがデフォルト ハンドラとして機能する際にアクセスするユーザーの機密情報を考慮して、アプリがデフォルト ハンドラになるには、Play ストア掲載の要件と主要な機能の要件を満たす必要があります。
- アプリは、デフォルト ハンドラとしての機能を実行できる必要があります。たとえば、デフォルト SMS ハンドラはテキスト メッセージを送信できることが必要です。
- アプリは、プライバシー ポリシーを提示する必要があります。
- アプリは、Play ストアに掲載される説明で主要な機能を明示する必要があります。たとえば、デフォルト通話ハンドラの場合、説明の中に通話関連の機能を記述する必要があります。
- アプリは、ユースケースに適した権限を宣言する必要があります。特定のハンドラとして宣言できる権限の詳細については、Play Console ヘルプセンターの SMS や通話履歴に関する権限グループの使用に関するガイダンスをご覧ください。
- アプリは、ハンドラであることに関連する権限をリクエストする前に、デフォルト ハンドラになることをリクエストする必要があります。たとえば、アプリは
READ_SMS
権限をリクエストする前に、デフォルト SMS ハンドラになることをリクエストする必要があります。
ユーザーの同意を求める
アプリがデフォルト ハンドラになるために必要な個々の要件を満たすことを確認したら、図 3 に示すダイアログを表示するロジックを追加できます。このダイアログは、アプリを特定のユースケースのデフォルト ハンドラにすることをユーザーにリクエストします。
次のサンプルコードは、デバイスのデフォルト SMS ハンドラを変更することをユーザーにリクエストするプロンプトを表示するために必要なロジックを示しています。
Kotlin
val setSmsAppIntent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) setSmsAppIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName) startActivityForResult(setSmsAppIntent, your-result-code)
Java
Intent setSmsAppIntent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); setSmsAppIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName()); startActivityForResult(setSmsAppIntent, your-result-code);