В Android 13 используется модель согласия, а не отказа, как в предыдущих версиях Android. В Android 13 все приложения должны запрашивать у пользователей разрешение на отправку уведомлений. Такая модель позволяет уменьшить количество уведомлений, избежать перегрузки информацией и дать пользователям возможность выбирать, какие уведомления они хотят получать. Чтобы поддерживать модель согласия, производители оригинального оборудования должны внести изменения в системы уведомлений и разрешений во время выполнения.
В этой статье рассказывается, что нужно сделать OEM-производителям, чтобы поддержать это изменение, и как проверить реализацию.
Как реализовать изменения для уведомлений с запросом согласия
В Android 13 и более поздних версий приложения должны заявлять о намерении отправлять уведомления, запрашивая у системы динамическое разрешение android.permission.POST_NOTIFICATION.
В Android 13 и более поздних версиях настройка, определяющая, может ли приложение отправлять уведомления пользователю, хранится в системе разрешений. В версиях до Android 13 этот параметр хранился в системе уведомлений. Поэтому производители оригинального оборудования должны перенести существующие данные о том, разрешено ли приложению отправлять уведомления, из системы уведомлений в систему динамических разрешений. Производители оригинального оборудования также должны поддерживать существующие 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/.