В уведомлениях в 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/ .