Типы сообщений Firebase Cloud Messaging

С помощью FCM можно отправлять в клиентские приложения два типа сообщений:

  • Уведомления, похожие на сообщения, обрабатываются автоматически с помощью SDK FCM.
  • Сообщения с данными, которые обрабатываются клиентским приложением.

Уведомления содержат предопределенный набор ключей, видимых пользователю, и могут содержать необязательную полезную нагрузку данных. Сообщения с данными, напротив, содержат только заданные пользователем пары "ключ-значение". Максимальный размер полезной нагрузки для обоих типов сообщений составляет 4096 байтов, за исключением случаев, когда сообщения отправляются с консоли Firebase, где действует ограничение в 1000 символов.

Использовать сценарий Как отправить
Уведомление SDK FCM показывает сообщение на устройствах конечных пользователей от имени клиентского приложения, когда оно работает в фоновом режиме. Если же приложение запущено и открыто, то его поведение определяется кодом.
  1. В доверенной среде, например Cloud Functions или на сервере приложения, используйте Firebase Admin SDK или HTTP v1 API. Задайте ключ notification. Может содержать необязательную полезную нагрузку. Всегда складной.

    Ознакомьтесь с примерами уведомлений и отправьте полезную нагрузку запроса.

  2. Используйте компоновщик уведомлений. Введите текст сообщения, заголовок и т. д. и отправьте его. Добавьте необязательную полезную нагрузку, указав специальные данные.
Сообщение с данными Обработка сообщений с данными выполняется клиентским приложением. Сообщения с данными содержат только специальные пары "ключ-значение" без зарезервированных названий ключей (см. ниже). В доверенной среде, например Cloud Functions или на сервере приложения, используйте Firebase Admin SDK или HTTP v1 API. В запросе на отправку задайте ключ data.

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

Сообщения с данными можно использовать, когда вы хотите обрабатывать сообщения с помощью собственного кода клиентского приложения.

Уведомления

Вы можете отправлять уведомления с помощью консоли Firebase, Firebase Admin SDK или FCM HTTP v1 API. Консоль Firebase позволяет проводить A/B-тестирование на основе аналитических данных, чтобы улучшать уведомления.

Чтобы отправлять уведомления с помощью Firebase Admin SDK или FCM HTTP v1 API, задайте ключ notification с предопределенным набором параметров "ключ-значение" для уведомления. Приведенный ниже пример поможет вам отформатировать сообщение уведомления в приложении для обмена мгновенными сообщениями.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

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

Сообщения с данными

Вы можете использовать полезную нагрузку FCM data для реализации выбранной схемы шифрования. Убедитесь, что в ваших собственных парах "ключ-значение" не используются зарезервированные слова. К зарезервированным словам относятся from, message_type и любые слова, начинающиеся с google., gcm. или gcm.notification..

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

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

Уведомления с необязательной полезной нагрузкой

Вы можете отправлять уведомления, содержащие необязательную полезную нагрузку с парами "ключ-значение", программно или с помощью консоли Firebase. В Компоновщике уведомлений используйте поля Специальные данные в разделе Дополнительные настройки.

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

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

Ниже приведен пример сообщения в формате JSON, содержащего ключ notification и ключ data:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}