6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

デフォルトのハンドラでのみ使用される権限

通話履歴の読み取りや SMS メッセージの送信など、一部の主要なデバイス機能は、ユーザーの機密情報へのアクセス権に依存します。ユーザーのプライバシーを保護し、デバイスのアプリに提供する情報をユーザーがよりきめ細かく管理できるようにするため、Google Play では通話やメッセージ関連の権限グループに対するアプリのアクセスが制限されます。

アプリを Google Play ストアで配布し、通話履歴や SMS メッセージに関連するユーザーの機密情報にアクセスするには、アプリが Play Console ヘルプセンターに表示される例外ケースのいずれかに該当する場合を除いて、対象となる権限に関連する主要なデバイス機能のデフォルト ハンドラとして登録されている必要があります。たとえば、通話に関連した権限にアクセスするには、例外ケースに該当しない限り、アプリはユーザーのデフォルトの通話ハンドラまたはアシスタント ハンドラとして登録されている必要があります。

このガイドでは、Android 搭載デバイスでユーザーがデフォルト ハンドラにアクセスする方法を簡単に説明します。次に、アプリがデフォルト ハンドラになるために満たす必要がある要件を確認します。最後に、デフォルト ハンドラになるためにユーザーの同意を得る手順について説明します。

デフォルト ハンドラの詳細や、Play ストアで入手可能なアプリでの権限の処理方法について詳しくは、権限ポリシーガイドをご覧ください

デフォルト ハンドラのセットを表示して変更する

Android は、通話の発信、SMS メッセージの送信、支援技術機能の提供など、いくつかの主要なユースケースに対応するデフォルト ハンドラを備えています。

Android の設定アプリには、図 1 に示すように、現在どのアプリがデバイスの主要な機能のデフォルト ハンドラになっているかを表示する画面が用意されています。この画面から、ユーザーは図 2 に示すように、特定の機能のデフォルト ハンドラを変更できます。

デフォルト アプリの設定画面のキャプチャ
図 1. デバイスでデフォルト ハンドラのリストを表示するシステム設定画面
デフォルトの SMS アプリに関する設定画面のキャプチャ
図 2. デフォルトの SMS ハンドラを変更する方法を示すシステム設定画面

デフォルト ハンドラとしての要件を満たす

アプリがデフォルト ハンドラとして機能する際にアクセスするユーザーの機密情報を想定すると、アプリがデフォルト ハンドラになるには、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);
    
ユーザー向けダイアログを示す画面のキャプチャ
図 3. デバイスのデフォルトの SMS ハンドラを変更するかどうかをユーザーに尋ねるプロンプト