В Android 13 (уровень API 33) и выше поддерживается разрешение времени выполнения для отправки неисключенных уведомлений (включая уведомления служб переднего плана (FGS)) из приложения: POST_NOTIFICATIONS
. Это изменение помогает пользователям сосредоточиться на наиболее важных для них уведомлениях.
Мы настоятельно рекомендуем вам как можно скорее перейти на Android 13 или более позднюю версию, чтобы воспользоваться дополнительными возможностями управления и гибкостью этой функции. Если вы продолжите использовать версию 12L (уровень API 32) или ниже, вы потеряете некоторую гибкость при запросе разрешения в контексте функциональности вашего приложения .
Объявить разрешение
Чтобы запросить новое разрешение на уведомление из вашего приложения, обновите его до версии Android 13 и выполните аналогичную процедуру запроса других разрешений среды выполнения , как показано в следующих разделах.
Разрешение, которое вам необходимо объявить в файле манифеста вашего приложения, представлено в следующем фрагменте кода:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATI>ONS&q<uot;/ appli>cation ... < ... >span>/ap<plication> /manifest
Возможности приложения зависят от выбора пользователя в диалоговом окне разрешений.
В этом диалоговом окне пользователям доступны следующие действия:
- Выберите «Разрешить»
- Выберите «Не разрешать»
- Проведите пальцем от диалогового окна , не нажимая ни одну из кнопок.
В следующих разделах описывается, как ведет себя ваше приложение в зависимости от действий, предпринимаемых пользователем.
Пользователь выбирает «Разрешить»
Если пользователь выбирает опцию «Разрешить» , ваше приложение может сделать следующее:
- Отправлять уведомления. Разрешены все каналы уведомлений .
- Публикуйте уведомления, связанные с активными службами . Эти уведомления отображаются в панели уведомлений .
Пользователь выбирает «Не разрешать»
Если пользователь выбирает вариант «Не разрешать» , ваше приложение не сможет отправлять уведомления, если только оно не соответствует требованиям исключения . Все каналы уведомлений блокируются, за исключением нескольких определённых ролей. Это похоже на поведение, которое происходит, когда пользователь вручную отключает все уведомления для вашего приложения в системных настройках.
Внимание: если ваше приложение рассчитано на 12L или ниже и пользователь нажимает « Не разрешать» хотя бы один раз, повторное сообщение не будет выведено до тех пор, пока не произойдет одно из следующих событий:
- Пользователь удаляет и переустанавливает ваше приложение.
- Вы обновляете свое приложение для Android 13 или выше.
Пользователь смахивает экран из диалогового окна
Если пользователь смахивает экран из диалогового окна (то есть не выбирает ни «разрешить» , ни «не разрешить» ), состояние разрешения на отправку уведомлений не меняется.
Влияние на недавно установленные приложения
Если пользователь устанавливает ваше приложение на устройство под управлением Android 13 или более поздней версии, уведомления приложения по умолчанию отключены . Вашему приложению придётся ждать, пока вы запросите новое разрешение и пользователь предоставит его приложению, прежде чем отправлять уведомления.
Время появления диалогового окна разрешений зависит от целевой версии SDK вашего приложения:
- Если ваше приложение предназначено для Android 13 или более поздних версий, оно полностью контролирует время отображения диалогового окна с запросом разрешения. Используйте эту возможность, чтобы объяснить пользователям, зачем приложению нужно это разрешение, и побудить их предоставить его.
- Если ваше приложение ориентировано на версию 12L (уровень API 32) или ниже, система отображает диалоговое окно разрешения при первом запуске приложения после создания канала уведомлений или при запуске приложения с последующим созданием первого канала уведомлений. Обычно это происходит при запуске приложения.
Влияние на обновления существующих приложений
Чтобы минимизировать перебои, связанные с разрешением на отправку уведомлений, система автоматически предоставляет разрешение всем соответствующим приложениям при обновлении устройства до Android 13 или более поздней версии. Другими словами, эти приложения могут продолжать отправлять уведомления пользователям, и пользователи не видят запроса на разрешение во время выполнения.
Право на предварительное разрешение
Чтобы ваше приложение имело право на автоматическую предварительную выдачу гранта, у него должен быть существующий канал уведомлений, и уведомления не должны быть явно отключены пользователем на устройстве с ОС 12L или ниже.
Если пользователь отключил уведомления для вашего приложения на устройстве под управлением Android 12L или ниже, этот запрет сохранится и при обновлении устройства до Android 13 или выше.
Исключения
В этом разделе представлен список уведомлений и приложений, на которые не распространяется изменение поведения разрешения на уведомления. В Android 13 (уровень API 33) и более поздних версиях, если пользователь откажется от разрешения на уведомления, уведомления, связанные с активными службами, по-прежнему будут отображаться в диспетчере задач , но не в панели уведомлений .
Медиа-сессии
Уведомления, связанные с сеансами мультимедиа, не подпадают под это изменение поведения.
Приложения, настроенные для самостоятельного управления телефонными вызовами
Если ваше приложение настраивается на самостоятельное управление телефонными вызовами, вам не требуется разрешение POST_NOTIFICATIONS
, чтобы ваше приложение отправляло уведомления, использующие стиль уведомлений Notification.CallStyle
.
Система считает, что ваше приложение настроило себя для самостоятельного управления телефонными вызовами, если оно выполняет каждое из следующих действий:
- Объявляет разрешение
MANAGE_OWN_CALLS
. - Реализует интерфейс
ConnectionService
. - Регистрируется у оператора связи устройства путем вызова
registerPhoneAccount()
.
Протестируйте свое приложение
Вы можете оценить, как разрешение на уведомления влияет на ваше приложение при его первом использовании на устройстве под управлением Android 13 или более поздней версии. Следующие наборы команд Android Debug Bridge (ADB) позволяют имитировать наиболее распространённые последовательности действий пользователя и обновлений устройства без необходимости сброса настроек тестового устройства:
Приложение недавно установлено на устройстве под управлением Android 13 или выше:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Пользователь сохраняет уведомления включенными, если приложение установлено на устройстве с версией Android 12L или ниже, а затем устройство обновляется до Android 13 или выше:
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Пользователь вручную отключает уведомления, когда приложение установлено на устройстве с версией Android 12L или ниже, а затем устройство обновляется до Android 13 или выше:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Лучшие практики
В этом разделе описывается несколько способов наиболее эффективного использования нового разрешения на уведомления в вашем приложении.
Обновите целевую версию SDK вашего приложения
Чтобы предоставить приложению больше гибкости в выборе момента появления диалогового окна разрешения, обновите его так, чтобы оно работало на базе Android 13 или более поздней версии.
Дождитесь отображения запроса на разрешение уведомления
Прежде чем просить пользователей предоставить какие-либо разрешения, дайте им ознакомиться с вашим приложением.
Новым пользователям может быть интересно изучить приложение и лично оценить преимущества каждого отдельного запроса на уведомление. Вы можете инициировать запрос на разрешение по действию пользователя. Ниже приведено несколько примеров того, когда целесообразно показывать запрос на разрешение на уведомление:
- Пользователь нажимает кнопку «звонок оповещения».
- Пользователь решает подписаться на чей-то аккаунт в социальных сетях.
- Пользователь оформляет заказ на доставку еды.
На рисунке 1 показан рекомендуемый рабочий процесс запроса разрешения на уведомление. Если shouldShowRequestPermissionRationale()
не возвращает true
, вашему приложению не требуется отображать средний экран — тот, на котором находится заголовок «Получать уведомления!».
В качестве альтернативы вы можете настроить отображение запроса после того, как вы дадите пользователям возможность ознакомиться с вашим приложением. Например, можно дождаться третьего или четвёртого запуска приложения пользователем.
shouldShowRequestPermissionRationale()
возвращает true
.Запросить разрешение в контексте
Когда вы запрашиваете разрешения на получение уведомлений в своем приложении, делайте это в правильном контексте, чтобы было четко понятно, для чего используются уведомления и почему пользователь должен на них согласиться. Например, приложение электронной почты может включать в себя опции отправки уведомлений о каждом новом письме или только о тех письмах, единственным получателем которых является пользователь.
Используйте эту возможность, чтобы продемонстрировать свои намерения, и пользователи с большей вероятностью дадут разрешение на отправку уведомлений вашему приложению.
Проверьте, может ли ваше приложение отправлять уведомления
Прежде чем приложение отправит уведомление, убедитесь, что пользователь включил уведомления для вашего приложения. Для этого вызовите метод areNotificationsEnabled()
.
Используйте разрешение ответственно.
Получив разрешение на отправку уведомлений, не забывайте использовать его ответственно. Пользователи смогут видеть количество ежедневных уведомлений, отправляемых вашим приложением, и смогут отозвать разрешение в любое время.