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

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

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

  • Высокий приоритет. 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 , чтобы обработать ее в фоновом режиме.