Android 13 の通知では、以前の Android バージョンの通知で使用されているオプトアウト モデルに代わって、オプトイン モデルが使用されています。Android 13 では、すべてのアプリは通知プロンプトを送信する前に、ユーザーに許可を求める必要があります。このモデルを利用すれば、ユーザーが自分にとって何が重要かに応じて通知の表示を制御できるため、情報が過剰にならないようにしながら通知が遮断されないようにすることができます。OEM がオプトイン モデルをサポートするには、通知システムと実行時権限システムに変更を実装する必要があります。
このページでは、OEM がこの変更をサポートするために実装する必要があるものと、実装を検証する方法について説明します。
オプトイン通知の変更を実装する
Android 13 以降では、アプリが通知を送信するにはインテントを宣言する必要があります。そのためには、通知を送信する前に、実行時の権限 android.permission.POST_NOTIFICATION
をシステムにリクエストします。
Android 13 以降、アプリがユーザーに通知を送信できるかどうかを決定する設定は、権限システムに保存されます。Android 13 より前のバージョンでは、この設定は通知システムに保存されていました。したがって、OEM は、通知の送信がアプリに許可されているかどうかに関する既存の通知データを、通知システムから実行時権限システムに移行する必要があります。また、OEM は、そのデータをアプリ デベロッパーに表示する通知システム内の既存の API を保持する必要があります。
通知システムと権限システムに対する変更は、オプトイン モデルにおけるユーザー通知の動作に基づいて行います。詳しくは、実装のガイドラインのセクションをご覧ください。
オプトイン モデルにおけるユーザー通知の動作
次の表は、Android 13 を搭載したデバイス上のアプリにおける通知の動作を、アプリ バージョンごとに示しています。
Android 13 を搭載したデバイス | Android 13 以上をターゲットとするアプリ | Android 13 より前のバージョンをターゲットとするアプリ |
---|---|---|
新規インストール | アプリがプロンプトを表示するまで、通知はブロックされます。
アプリは権限をリクエストするタイミングを制御します。 |
OS がプロンプトを表示するまで、通知はブロックされます。
アプリの初回実行時に権限がリクエストされます。 |
既存のアプリ(アップグレード) | アプリがプロンプトを表示するまで、通知は許可されます。
初回実行時にアプリが権限をリクエストするまで、一時的な権限が付与されます。 |
OS がプロンプトを表示するまで、通知は許可されます。
アプリの初回実行まで、一時的な権限が付与されます。 |
実装のガイドライン
リファレンス実装については、通知サービス、権限サービス、ポリシー サービスをご覧ください。デフォルトの権限ハンドラ用の例外を実装するには、実行時の権限をご覧ください。
Android 13 より前の SDK をターゲットとするアプリの場合は、実装時に以下のガイドラインを使用してユーザー通知の動作を確認してください。
- Android 13 デバイスに初めてインストールされたアプリは、ユーザーが権限プロンプトに同意しない限り、通知を送信してはなりません。
- Android 13 以上をターゲットとするアプリの場合は、ユーザーに権限をリクエストするかどうかとそのタイミングをアプリが制御するので、アプリがプロンプトを表示するまで通知をブロックする必要があります。
- Android 13 より前のバージョンをターゲットとするアプリの場合は、OS がプロンプトを表示するまで通知をブロックする必要があります。OS は、アプリの初回実行時に権限プロンプトを表示する必要があります。
Android 13 へのアップグレードの前にデバイス上に存在していたアプリ、またはバックアップと復元によって復元されたアプリの場合は、ユーザーがそのアプリのアクティビティを初めて起動するまで、通知の送信を許可する必要があります。
Android 13 以降のバージョンの SDK をターゲットとするアプリの場合は、ユーザーが以前にアプリレベルまたは
NotificationChannel
レベルでアプリの通知設定をカスタマイズしていなければ、一時的な権限の付与を取り消します。アプリが引き続き通知を送信するには、ユーザーに権限をリクエストする必要があります。Android 13 をターゲットとするアップグレード済みのアプリが、アップグレードで一時的に付与される通知権限を現在持っておらず、ユーザーがそのアプリを少なくとも 1 回起動したことがある場合、それ以降のフォアグラウンド サービスをアプリが実行するには、通知権限プロンプトを表示する必要があります。
Android 13 より前のバージョンの SDK をターゲットとするアプリの場合は、アプリが少なくとも 1 つの
NotificationChannel
を作成した後で、初回のアクティビティ起動をインターセプトし、アプリから通知を受け取りたいかどうかをユーザーに尋ねる権限プロンプトを表示します。アップグレード中のデバイス上のアプリ、またはバックアップをデバイスに復元中のアプリにおいてユーザーが以前にアプリレベルまたは
NotificationChannel
レベルで通知設定をカスタマイズした場合は、FLAG_PERMISSION_USER_SET
フラグを含む権限システムにアプリレベルの設定を移行する必要があります。アプリが特に要求しない限り、追加の通知権限プロンプトをユーザーに表示してはなりません。
バックアップと復元は、Android 13 デバイスと、それより前の OS バージョンのデバイスの間で、下位互換性と上位互換性を備えている必要があります。Android 13 デバイスから生成されたバックアップ データは、それより前の OS バージョンに復元でき、13 より前の OS バージョンのバックアップ データは、Android 13 デバイスに復元できる必要があります。
進行中のメディア再生に関連付けられているメディア通知は、通知権限から除外する必要があります。
通知システムと権限システムに対する変更を検証する
実装を検証するには、以下のテストを実行します。
PreferencesHelperTest
、NotificationManagerServiceTest
で指定された単体テスト。アップグレード、バックアップ、復元をテストする手動テスト。
通知を送信する権限システムと通知システムの CTS テスト。これらのテストの一部は、cts/tests/tests/permission/、NotificationManagerTest.java、および cts/tests/tests/notificationlegacy/ にあります。