Android 13 (уровень API 33) и выше поддерживает разрешение времени выполнения для отправки неисключенных (включая Foreground Services (FGS)) уведомлений из приложения: POST_NOTIFICATIONS
. Это изменение помогает пользователям сосредоточиться на уведомлениях, которые наиболее важны для них.
Мы настоятельно рекомендуем вам как можно скорее перейти на Android 13 или выше, чтобы воспользоваться дополнительным контролем и гибкостью этой функции. Если вы продолжите ориентироваться на 12L (уровень API 32) или ниже, вы потеряете некоторую гибкость при запросе разрешения в контексте функциональности вашего приложения .
Объявить разрешение
Чтобы запросить новое разрешение на уведомления из вашего приложения, обновите его до версии Android 13 и выполните процедуру, аналогичную запросу других разрешений среды выполнения , как показано в следующих разделах.
Разрешение, которое вам необходимо объявить в файле манифеста вашего приложения, представлено в следующем фрагменте кода:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </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()
.
Используйте разрешение ответственно
После получения разрешения на отправку уведомлений не забывайте использовать разрешение ответственно. Пользователи могут видеть количество ежедневных уведомлений, которые отправляет ваше приложение, и они могут отозвать разрешение в любое время.