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

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

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

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

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

    Ознакомьтесь с некоторыми примерами отображения уведомлений и отправки полезных данных запросов.

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

Вы можете использовать уведомления, если хотите, чтобы FCM SDK автоматически отображал уведомления, когда ваше приложение работает в фоновом режиме. 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!"
    }
  }
}

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

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

Сообщения данных

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

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

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