Создайте уведомление о живом обновлении

Система продвигает уведомления об обновлениях в реальном времени. Продвигаемые уведомления отображаются более заметно на различных элементах интерфейса, включая верхнюю часть панели уведомлений и экран блокировки, а также в виде значка в строке состояния.

Рисунок 1. Пример уведомления об обновлении в режиме реального времени.

Рекламные уведомления имеют следующие внешние характеристики:

  • Развернуто по умолчанию
  • Нескладной

Для того чтобы ваше уведомление считалось актуальной информацией, оно должно соответствовать следующим требованиям:

  • Должен быть выбран стиль Standard Style, BigTextStyle , CallStyle или ProgressStyle .
  • Необходимо запросить следующее разрешение, не зависящее от времени выполнения, в манифесте Android: android.permission.POST_PROMOTED_NOTIFICATIONS .
  • Для запроса повышения статуса необходимо использовать EXTRA_REQUEST_PROMOTED_ONGOING или NotificationCompat.Builder#setRequestPromotedOngoing .
  • Должно быть ongoing (установите флаг FLAG_ONGOING_EVENT ).
  • Необходимо задать заголовок contentTitle ).
  • Не должно быть задано ни одного customContentView представления (например, RemoteViews ).
  • Это НЕ должно быть сводное описание группы, созданной с помощью setGroupSummary .
  • Значение setColorized в TRUE НЕ должно быть установлено.
  • Канал уведомлений НЕ должен иметь IMPORTANCE_MIN .

Характеристики продвижения

Следующие API-интерфейсы помогут вам определить, будет ли система продвигать ваше уведомление:

  • Notification.FLAG_PROMOTED_ONGOING указывает, продвигается ли уведомление.
  • Notification.hasPromotableCharacteristics() проверяет, может ли система продвигать уведомление. Этот метод не учитывает, отключил ли пользователь функцию «Оперативные обновления» для приложения в настройках.
  • NotificationManager.canPostPromotedNotifications() проверяет, может ли ваше приложение отправлять рекламные уведомления, например, если пользователь включил или отключил их в настройках.
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS — это действие интента, которое позволяет приложениям перенаправлять пользователей в «Настройки» для включения этой функции.

Критерии использования

Используйте функцию «Обновления в реальном времени» для действий, которые происходят постоянно, инициируются пользователем и требуют оперативного реагирования.

Непрерывный

Уведомление в режиме реального времени должно отражать активное действие, имеющее четкое начало и конец. Если действие произошло в прошлом, не используйте уведомление в режиме реального времени. Вместо этого используйте стандартное уведомление. Это также относится к событиям, которые еще не начались, хотя события, которые вот-вот начнутся, могут использовать уведомление в режиме реального времени.

«Оперативные обновления» отражают текущие действия. Не используйте «Оперативные обновления» для ускоренного доступа к функциям приложения. Если вам это необходимо, используйте виджет приложения или настраиваемую плитку быстрых настроек.

  • Подходящие варианты использования: активная навигация, текущие телефонные звонки, активное отслеживание поездок на такси и активное отслеживание доставки еды.
  • Недопустимое использование: реклама, акции, сообщения в чате, оповещения, предстоящие события календаря и быстрый доступ к функциям приложения.

Инициировано пользователем

Большинство обновлений в режиме реального времени должны отображать действия, инициированные пользователем, например, начало тренировки, запуск навигации или вызов такси. Не отображайте в обновлениях в режиме реального времени информацию об окружающей обстановке, такую ​​как данные об окружении пользователя, его интересах или предстоящих событиях. Не допускайте, чтобы обновления в режиме реального времени генерировались действиями, инициированными другими пользователями.

Иногда пользователь может совершить действие, которое инициирует активность в будущем. Например, если пользователь покупает билеты на самолет или концерт, регистрируется на турнир или иным образом указывает на свое участие в мероприятии, ограниченном по времени. В таких случаях может быть целесообразно автоматически показывать «Обновление в реальном времени» при начале запланированного события. Однако приложения должны настраивать свои триггеры таким образом, чтобы они появлялись только тогда, когда активность неизбежна. Если пользователь явно указывает, что хочет начать мониторинг фонового события, такого как спортивная игра, вы можете начать публиковать «Обновления в реальном времени» для этого события. Однако вам также следует включить действие «Открепить» в соответствующее уведомление.

Срочно

Отображайте «Обновления в реальном времени» только в том случае, если это требует внимания пользователя на протяжении всего процесса. Ключевой сценарий использования «Обновлений в реальном времени» — это мониторинг, когда пользователь получает значительную пользу от быстрого просмотра обновлений для отслеживания меняющегося состояния процесса.

Функция «Обновление в реальном времени» часто подходит для действий, требующих плавного перехода от обычных уведомлений к обновлениям в реальном времени. Например, отображение уведомления о посадочном талоне уместно за много часов до вылета, но уведомление должно переходить в режим «Обновление в реальном времени» только тогда, когда у пользователя есть в этом острая необходимость, например, по прибытии в аэропорт или место проведения мероприятия, или после начала посадки. В отличие от этого, функция «Обновление в реальном времени» не подходит для отслеживания посылки, поскольку пользователю не нужно постоянно следить за ней.

Чипы состояния

Индикаторы состояния позволяют пользователям отслеживать обновления в режиме реального времени, даже когда уведомление не отображается. Используйте setShortCriticalText или setWhen для передачи важной информации о состоянии вашего уведомления, ориентированного на прогресс.

индикатор состояния с иконкой
Рисунок 2. В неопределенном состоянии отображается небольшой значок Notification.Builder#setSmallIcon .
микросхема состояния со временем
Рисунок 3. Используйте Notification.Builder#setShortCriticalText для отображения абсолютного времени.
чип состояния с информацией
Рисунок 4. Используйте Notification.Builder#setShortCriticalText для передачи важной информации.

Когда время

Функция «Когда время» запускает обратный отсчет времени, отведенного на отображение уведомления, если только уведомление не будет отклонено или обновлено. Ниже описано, как работает функция «Когда время» в различных ситуациях:

  • Если время установлено как минимум на 2 минуты вперед, то чип показывает 5 минут .
  • Когда время отсчитывается от прошлого: текст не отображается.
  • При использовании хронометра для отображения времени на экране микросхемы может отображаться таймер. См. setUsesChronometer и setChronometerCountdown . Таймер хронометра отображается на экране микросхемы, пока его значение положительное.
  • Если вы не хотите, чтобы время отображалось в уведомлении, используйте setShowWhen со значением FALSE .

Внешний вид чипа состояния

Индикатор состояния всегда содержит значок, а при необходимости и текст. Максимальная ширина индикатора составляет 96dp. Текст будет отображаться только в том случае, если он полностью поместится на индикаторе. Отображение текста зависит от следующих критериев:

  • Если символов меньше 7, отобразить весь текст.
  • Если отображается менее половины текста, покажите только значок.
  • Если отображается более половины текста, покажите как можно больше текста.

Увольнение

Пользователи могут управлять видимостью уведомлений в панели уведомлений. Публикация нежелательных обновлений в режиме реального времени может привести к тому, что пользователи отзовут разрешение приложения на публикацию.

Чтобы предотвратить полное отключение пользователями функции «Обновления в реальном времени», избегайте публикации обновлений, которые пользователи могут отклонить. Не публикуйте повторно обновления в реальном времени, которые пользователь отклонил. Используйте setDeleteIntent для обнаружения отклоненных обновлений.

Для экспериментов с этими API ознакомьтесь с примером приложения .