Android 13 (уровень API 33) и выше поддерживает разрешение во время выполнения для отправки уведомлений, не подпадающих под исключения (включая уведомления от служб переднего плана (FGS)): POST_NOTIFICATIONS . Это изменение помогает пользователям сосредоточиться на наиболее важных для них уведомлениях.
Мы настоятельно рекомендуем как можно скорее ориентироваться на Android 13 или выше, чтобы воспользоваться дополнительными возможностями управления и гибкостью этой функции. Если вы продолжите ориентироваться на 12L (уровень API 32) или ниже, вы потеряете часть гибкости при запросе разрешения в контексте функциональности вашего приложения .
Подтвердите разрешение
Чтобы запросить новое разрешение на уведомления для вашего приложения, обновите приложение до версии Android 13 и выполните действия, аналогичные запросам других разрешений во время выполнения , как показано в следующих разделах.
Необходимые для указания в файле манифеста вашего приложения разрешения приведены в следующем фрагменте кода:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Функциональность приложения зависит от выбора пользователя в диалоговом окне разрешений.
В этом диалоговом окне пользователям доступны следующие действия:
- Выберите разрешить
- Выберите «не разрешать».
- Проведите пальцем в сторону от диалогового окна , не нажимая ни одну из кнопок.
В следующих разделах описывается, как ваше приложение ведет себя в зависимости от действий пользователя.
Пользователь выбирает «Разрешить».
Если пользователь выберет вариант «Разрешить» , ваше приложение сможет выполнить следующие действия:
- Отправляйте уведомления. Разрешены все каналы уведомлений .
- Отображайте уведомления, связанные с работающими в фоновом режиме службами . Эти уведомления отображаются в панели уведомлений .
Пользователь выбирает «Не разрешать».
Если пользователь выберет опцию «не разрешать» , ваше приложение не сможет отправлять уведомления, если не соответствует критериям исключения . Все каналы уведомлений будут заблокированы, за исключением нескольких определенных ролей. Это похоже на поведение, которое происходит, когда пользователь вручную отключает все уведомления для вашего приложения в системных настройках.
Внимание: если ваше приложение ориентировано на пользователей с уровнем грамотности 12 л/100 и ниже, и пользователь нажимает «Не разрешать» , даже один раз, повторное приглашение не будет отправлено до тех пор, пока не произойдет одно из следующих событий:
- Пользователь удаляет и переустанавливает ваше приложение.
- Вы обновляете свое приложение, чтобы оно было ориентировано на Android 13 или выше.
Пользователь проводит пальцем в сторону от диалогового окна.
Если пользователь проведет пальцем в сторону от диалогового окна — то есть, не выберет ни «разрешить» , ни «не разрешить », — состояние разрешения на уведомления не изменится.
Влияние на недавно установленные приложения
Если пользователь устанавливает ваше приложение на устройство под управлением Android 13 или выше, уведомления вашего приложения по умолчанию отключены . Вашему приложению необходимо дождаться отправки уведомлений, пока вы не запросите новое разрешение, и пользователь не предоставит это разрешение вашему приложению.
Время появления диалогового окна запроса разрешений зависит от целевой версии SDK вашего приложения:
- Если ваше приложение ориентировано на Android 13 или выше, оно полностью контролирует момент отображения диалогового окна запроса разрешения. Используйте эту возможность, чтобы объяснить пользователям, почему приложению необходимо это разрешение, и побудите их предоставить его.
- Если ваше приложение ориентировано на API уровня 12L (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_NOTIFICATIONSadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb 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_NOTIFICATIONSadb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb 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_NOTIFICATIONSadb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-setadb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
Передовые методы
В этом разделе описаны несколько способов наиболее эффективного использования нового разрешения на отправку уведомлений в вашем приложении.
Обновите целевую версию SDK вашего приложения.
Чтобы обеспечить вашему приложению большую гибкость в настройке времени появления диалогового окна запроса разрешения, обновите его до версии Android 13 или выше.
Дождитесь появления запроса на разрешение отправки уведомлений.
Прежде чем запрашивать у пользователей разрешение на использование приложения, дайте им возможность ознакомиться с ним.
Новым пользователям может быть полезно изучить приложение и лично убедиться в преимуществах каждого отдельного запроса на уведомление. Запрос на предоставление разрешений может быть инициирован действием пользователя. Ниже приведено несколько примеров того, когда уместно показывать запрос на предоставление разрешений для уведомлений:
- Пользователь нажимает кнопку "уведомления".
- Пользователь решает подписаться на аккаунт другого человека в социальных сетях.
- Пользователь оформляет заказ на доставку еды.
На рисунке 1 показан рекомендуемый алгоритм запроса разрешения на получение уведомлений. Если shouldShowRequestPermissionRationale() не возвращает true , вашему приложению не нужно отображать средний экран — тот, на котором находится заголовок «Получайте уведомления!».
В качестве альтернативы вы можете настроить появление запроса после того, как предоставите пользователям возможность ознакомиться с вашим приложением. Например, вы можете подождать до третьего или четвертого запуска приложения пользователем.
shouldShowRequestPermissionRationale() возвращает true .Запросить разрешение в контексте
При запросе разрешений на получение уведомлений в вашем приложении делайте это в правильном контексте, чтобы было совершенно ясно, для чего используются уведомления и почему пользователь должен дать на них согласие. Например, почтовое приложение может включать параметры для отправки уведомлений о каждом новом письме или только о тех письмах, получателем которых является только пользователь.
Воспользуйтесь этой возможностью, чтобы продемонстрировать свои намерения, и пользователи с большей вероятностью предоставят вашему приложению разрешение на отправку уведомлений.
Проверьте, может ли ваше приложение отправлять уведомления.
Прежде чем ваше приложение отправит уведомление, убедитесь, что пользователь включил уведомления для вашего приложения. Для этого вызовите метод ` areNotificationsEnabled() .
Используйте это разрешение ответственно.
После получения разрешения на отправку уведомлений помните о необходимости ответственного использования этого разрешения. Пользователи смогут видеть количество ежедневных уведомлений, отправляемых вашим приложением, и в любой момент смогут отозвать разрешение .