Уведомления в 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 |
---|---|---|
Новая установка | Уведомления блокируются до тех пор, пока их не запросит приложение. Приложения контролируют, когда запрашивать разрешение. | Уведомления блокируются до тех пор, пока их не попросит ОС. Разрешение запрашивается при первом запуске приложения. |
Существующее приложение (обновление) | Уведомления разрешены до тех пор, пока приложение не предложит их. Временное разрешение предоставляется до тех пор, пока приложение не запросит его при первом квалификационном запуске. | Уведомления разрешены до тех пор, пока их не попросит ОС. Временное разрешение предоставляется до первого запуска приложения. |
Руководство по реализации
Для эталонной реализации обратитесь к службе уведомлений , службе разрешений и службе политик . Чтобы реализовать исключения для обработчиков разрешений по умолчанию, см. Разрешения во время выполнения .
Во время внедрения используйте следующие рекомендации по поведению уведомлений пользователей для приложений, предназначенных для Android 13 или более ранних версий SDK:
- Только что установленные приложения на устройстве Android 13 не должны отправлять уведомление без одобрения пользователем запроса на разрешение.
- Если приложение предназначено для версий Android 13 и выше, уведомления должны быть заблокированы до тех пор, пока приложение не предложит, поскольку приложение контролирует, когда и если запрашивать разрешение пользователя.
- Если приложение предназначено для версий ниже Android 13, уведомления должны быть заблокированы до тех пор, пока ОС не попросит об этом. ОС должна отображать запрос разрешения при первом запуске приложения.
Любому приложению, существовавшему на устройстве до обновления до Android 13, или любому приложению, которое было восстановлено с помощью резервного копирования и восстановления, должно быть разрешено отправлять уведомления до тех пор, пока пользователь не запустит действие из этого приложения в первый раз.
Для приложений, предназначенных для SDK версий Android 13 и выше, если пользователь ранее не настраивал параметры уведомлений для этого приложения на уровне приложения или
NotificationChannel
, отмените временное разрешение. Затем приложения должны запросить у пользователя разрешение, прежде чем им будет разрешено продолжать отправлять уведомления.Если обновленное приложение, ориентированное на Android 13, в настоящее время не имеет разрешения на уведомление через временное разрешение на обновление, и пользователь запустил его хотя бы один раз, приложение должно отобразить запрос на разрешение на уведомление, прежде чем ему будет разрешено запускать какие-либо дополнительные службы переднего плана.
Для приложений с целевым SDK версий ниже Android 13 перехватывайте первый запуск действия после того, как приложение создало хотя бы один
NotificationChannel
, чтобы отобразить запрос разрешения с вопросом, хочет ли пользователь получать уведомления от приложения.Если пользователь ранее настраивал параметры уведомлений на уровне приложения или
NotificationChannel
для приложения на обновляемом устройстве или в резервной копии, восстанавливаемой на устройстве, параметр уровня приложения должен быть перенесен в систему разрешений с флагомFLAG_PERMISSION_USER_SET
. Пользователю не должны показываться дополнительные запросы разрешения на уведомление, если только приложение специально не попросит об этом.
Резервное копирование и восстановление должны быть обратно и вперед совместимы между устройством Android 13 и устройством с более ранней версией ОС. Данные резервного копирования, созданные на устройстве Android 13, должны быть восстановлены на более раннюю версию ОС, а данные резервного копирования из более ранней версии ОС должны быть восстановлены на устройство Android 13.
Медиа-уведомления, связанные с текущим воспроизведением мультимедиа, должны быть исключены из разрешения на уведомление.
Проверка изменений в системах уведомлений и разрешений
Чтобы проверить реализацию, запустите следующие тесты:
Модульные тесты, как указано в
PreferencesHelperTest
,NotificationManagerServiceTest
.Любой ручной тест, который проверяет обновления, резервное копирование и восстановление.
Любой тест системы разрешений и уведомлений CTS, который отправляет уведомления. Некоторые из этих тестов расположены в cts/tests/tests/permission/ , NotificationManagerTest.java и cts/tests/tests/notificationlegacy/ .