Устанавливайте и управляйте приоритетом сообщений

На Android существует два варианта назначения приоритета доставки сообщений в нисходящем направлении: обычный и высокий. Доставка сообщений с обычным и высоким приоритетом работает следующим образом:

  • Обычный приоритет. Это приоритет по умолчанию для сообщений с данными и уведомлений. Сообщения с обычным приоритетом доставляются немедленно, если устройство не находится в спящем режиме. Когда устройство находится в спящем режиме , доставка может быть отложена для экономии заряда батареи до выхода из спящего режима. Для менее срочных сообщений, таких как уведомления о новых электронных письмах, синхронизация пользовательского интерфейса или синхронизация данных приложений в фоновом режиме, выберите обычный приоритет доставки.

  • Высокий приоритет. FCM стремится немедленно доставлять сообщения с высоким приоритетом, что позволяет FCM при необходимости выводить устройство из спящего режима и выполнять некоторые ограниченные действия (включая очень ограниченный сетевой доступ). Сообщения с высоким приоритетом, как правило, должны приводить к взаимодействию пользователя с вашим приложением или его уведомлениями.

Выбор между сообщениями с высоким и обычным приоритетом

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

Обработка сообщений с высоким и обычным приоритетом

Для уведомлений как с высоким, так и с обычным приоритетом, полученных на устройстве Android, на обработку полезной нагрузки сообщения в обработчике onMessageReceived отводится несколько секунд. Для любых уведомлений, требующих асинхронной обработки полезной нагрузки сообщения, мы рекомендуем использовать конструкцию, такую как WorkManager, поскольку это может превысить время, отведенное обработчику onMessageReceived .

Для сообщений с высоким приоритетом вы можете запланировать ускоренное задание с помощью Android WorkManager, чтобы убедиться, что эти уведомления имеют приоритет и обрабатываются до конца.

Для сообщений с обычным приоритетом вы можете запланировать обычный запрос OneTimeWorkRequest с помощью Android WorkManager. Это обеспечит обработку дополнительных необходимых задач без использования приоритетной обработки.

Установка приоритета для сообщений

Вы можете отправлять уведомления пользователям с помощью Admin SDK , FCM REST API и консоли Firebase . Чтобы изменить приоритет из Admin SDK и FCM REST API, необходимо обновить полезную нагрузку JSON сообщения. Следующий пример кода поможет вам узнать, как установить высокий приоритет. Для уведомлений, отправляемых через консоль, настройка полей уведомлений, специфичных для Android, не поддерживается.

 {
  "message": {
      "notification": {
          "body": "Purchase exceeding $500 detected",
          "title": "Credit card purchase"
      },
      "data": {
          "purchaser": "Your child",
          "items": "Gravity Defier Sneakers"
      },
      "android": {
          "priority": "high"
      },
      "apns": {
          "headers": {
              "apns-priority": "5"
          }
      }
  }
}

Проверьте уведомления с высоким приоритетом в режиме Doze

Чтобы убедиться, что ваши высокоприоритетные уведомления принимаются и обрабатываются правильно при получении пользователем, следуйте этим инструкциям по тестированию уведомлений:

  1. Переведите свое устройство в режим Doze, следуя инструкциям в разделе Тестирование приложения с помощью Doze .
  2. Получите доступ к своему регистрационному токену FCM из приложения на тестовом устройстве. Подробнее о том, как получить доступ к токену, см. в статье «Отправка тестового сообщения в фоновое приложение» .
  3. Получив токен FCM , отправьте уведомление с высоким приоритетом на тестовое устройство, используя код отправки уведомления FCM или команду cURL %3B%0A%7D)-,cURL,-curl%20%2DX), параметры конфигурации которой соответствуют параметрам уведомления с высоким приоритетом.

Деприоритезация высокоприоритетного FCM на Android

Сообщения с высоким приоритетом на Android предназначены для контента, доступного пользователю и доступного в кратчайшие сроки, и должны приводить к отправке уведомлений. Если FCM обнаруживает закономерность, при которой сообщения не приводят к отправке уведомлений, ваши сообщения могут быть деприоритетированы до обычного уровня или переданы на обработку сервисам Google Play.

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

Делегирование уведомлений с помощью сервисов Google Play

Уведомления с высоким приоритетом, соответствующие определённым критериям, проксируются сервисами Google Play, а не деприоритетируются. Это означает, что уведомления отображаются сервисами Google Play от имени приложения, без необходимости запуска приложения. Это сделано для повышения общего удобства пользователей устройств Android.

Обратите внимание, что прокси-уведомления вносят изменения в способ предоставления аналитики, связанной с полученными сообщениями:

  • Для аналитики прокси-уведомлений ваше приложение должно использовать FCM SDK версии 24.0.0 или выше.
  • Вы можете заметить задержки или снижение количества полученных сообщений по сравнению с тем, что было до внедрения прокси-уведомлений. Это связано с тем, что аналитика по прокси-уведомлениям формируется только после запуска приложения и может не формироваться вообще, если уведомление не приводит к открытию приложения.

Такое проксирование уведомлений используется по умолчанию для приложений, использующих Android Q+ и сервисы Google Play версии 19054000 или более поздней. Сообщения, отправляемые через HTTP v1 API, проксируются, но сообщения, отправляемые через консоль Firebase или устаревшие API, проксироваться не будут . Обратите внимание, что эта функция в настоящее время находится в стадии бета-тестирования и может быть изменена.

Хотя мы настоятельно рекомендуем оставить делегирование включенным из-за его преимуществ для аккумулятора и памяти устройства, вы можете отказаться от этого поведения любым из следующих способов:

  • На уровне приложения: в манифесте приложения добавьте директиву <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/> .
  • На уровне экземпляра приложения: для экземпляра приложения задайте fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> в потоке пользовательского интерфейса вашего приложения в зависимости от конкретного варианта использования.
  • Для каждого сообщения: установите proxy ключ на DENY в объекте AndroidNotification для запроса на отправку.

Измерение деприоритета сообщений на Android

  • Отдельные сообщения. При доставке вы можете определить, был ли деприоритет отдельного сообщения снижен, сравнив его приоритет доставки, полученный с помощью метода getPriority() , с его исходным приоритетом, полученным с помощью метода getOriginalPriority() .

  • Все сообщения. API агрегированных данных о доставке FCM может сообщать, какой процент всех ваших сообщений на Android деприоритетируется. Некоторые сообщения могут быть исключены из отчётов по агрегированным данным, но в целом они должны давать общее представление о частоте деприоритетации сообщений. Подробнее об агрегированных данных о доставке и пример кода для запроса к API см. в нашей статье об агрегированных данных о доставке; также их можно изучить в обозревателе API .

  • Прокси-уведомления. Прокси-уведомления не учитываются в текущих метриках доставки FCM или GA, поэтому вы можете столкнуться с падением показателей доставки уведомлений до 15%. Для отчётности по прокси-сообщениям используйте API агрегированных данных доставки FCM . ProxyNotificationInsightPercents сообщает процент успешно проксированных уведомлений, а также подробную информацию о сообщениях, которые не удалось успешно проксировать.

Устранение неполадок с задержками уведомлений

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

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

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