2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
オプトイン通知の通知権限
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
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 デバイスに復元できる必要があります。
進行中のメディア再生に関連付けられているメディア通知は、通知権限から除外する必要があります。
通知システムと権限システムに対する変更を検証する
実装を検証するには、以下のテストを実行します。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-05 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-05 UTC。"],[],[],null,["# Notification permission for opt-in notifications\n\nNotifications in Android 13 use an opt-in model, which\nis a change from previous Android versions, which use an opt-out model. In\nAndroid 13, all apps must ask users for permission before\nsending notification prompts. This model helps reduce notification\ninterruptions, minimizes information overload, and helps users control what\nnotifications appear based on what's important to them. To support the\nopt-in model, OEMs must implement changes in the notification and runtime\npermission systems.\n\nThis page describes what OEMs must implement to support this change and how\nto validate the implementation.\n\nImplement changes for opt-in notifications\n------------------------------------------\n\nStarting with Android 13, apps must declare their\nintent to send notifications by requesting the\n[`android.permission.POST_NOTIFICATION`](https://developer.android.com/about/versions/13/changes/notification-permission)\nruntime permission from the system before they can send notifications.\n\nIn Android 13 and higher, the setting that determines\nif an app can send notifications to the user is stored in the permission system.\nPrior to Android 13, this setting was stored in the\nnotification system. Hence, OEMs must migrate the existing notification data\nabout whether an app is allowed to send notifications, from the notification\nsystem into the runtime permission system. OEMs must also maintain existing APIs\nin the notification system that surface that data to app developers.\n\nChanges to the notification and permission systems are based on the\n[opt-in model of user notification behavior](#behavior-optin) and are\ndescribed in the [Guidelines for implementation](#guidelines-impl) section.\n\n### Behavior of user notifications in an opt-in model\n\nThe following table illustrates the notification behavior for various app\nversions on a device running Android 13:\n\n| Device on Android 13 | Apps targeting Android 13 or higher | Apps targeting versions lower than Android 13 |\n|------------------------|--------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|\n| New install | Notifications are blocked until prompted by the app. Apps control when to ask for permission. | Notifications are blocked until prompted by the OS. Permission is asked on the first run of the app. |\n| Existing app (upgrade) | Notifications are allowed until prompted by the app. Temporary permission is granted until the app asks on the first qualifying run. | Notifications are allowed until prompted by the OS. Temporary permission is granted until the first run of the app. |\n\n### Guidelines for implementation\n\nFor reference implementation, refer to\n[notification service](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/notification/),\n[permission service](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/pm/permission/) and\n[policy service](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/policy). To implement exceptions\nfor default permission handlers see\n[Runtime Permissions](/docs/core/permissions/runtime_perms#integration).\n\nDuring implementation, use the following guidelines on user notification\nbehavior for apps targeting Android 13 or lower SDKs:\n\n- Freshly installed apps on an Android 13 device must not send a notification without the user approving a permission prompt.\n - If the app targets versions Android 13 and higher, notifications must be blocked until prompted by the app as the app controls when and if to ask for user permission.\n - If the app targets versions lower than Android 13, notifications must be blocked until prompted by the OS. The OS must show the permission prompt on the first run of the app.\n- Any app that existed on the device prior to an upgrade to\n Android 13, or any app that was restored through backup\n and restore, must be allowed to send notifications until the first time the user\n launches an activity from that app.\n\n - For apps that target SDK of versions Android 13\n and higher, if the user hasn't previously customized notification settings for\n this app at the app or `NotificationChannel` level, revoke the temporary\n permission grant. Apps must then ask the user for permission before being\n allowed to continue to send notifications.\n\n If an upgraded app targeting Android 13 doesn't\n currently have the notification permission through the temporary upgrade\n grant, and the user has launched it at least once, the app must show a\n notification permission prompt before it's allowed to run any further foreground\n services.\n - For apps that have a target SDK of versions lower than\n Android 13,\n [intercept](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/wm/ActivityInterceptorCallback.java)\n the first activity launch after the app has created at least one `NotificationChannel`\n to show a permission prompt asking if the user wants to receive notifications\n from the app.\n\n If a user previously customized notification settings at the\n app or `NotificationChannel` level for an app on the upgrading device or in a\n backup being restored to the device, the app level setting must be migrated into\n the permission system with the `FLAG_PERMISSION_USER_SET` flag. No further\n notification permission prompt must be shown to the user unless the app\n specifically asks it to be.\n- Backup and restore must be backward and forward compatible between an\n Android 13 device and a device from an earlier OS\n version. Backup data generated from an Android 13\n device must restore onto an earlier OS version, and backup data from an earlier\n OS version must restore onto an Android 13 device.\n\n- Media notifications associated with ongoing media playback must be exempt\n from the notification permission.\n\nValidate changes to the notification and permission systems\n-----------------------------------------------------------\n\nTo validate the implementation, run the following tests:\n\n- Unit tests as specified in [`PreferencesHelperTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java),\n [`NotificationManagerServiceTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java).\n\n- Any manual test that tests upgrades and backup and restore.\n\n- Any CTS Permission and Notification system test that sends notifications.\n Some of these tests are located in [cts/tests/tests/permission/](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/modules/Permission/tests/cts/permission/src/android/permission/cts/),\n [NotificationManagerTest.java](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/notification/src/android/app/notification/current/cts/NotificationManagerTest.java?q=NotificationManagerTest.java),\n and [cts/tests/tests/notificationlegacy/](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/notificationlegacy/)."]]