В этом документе содержится ссылка на синтаксис XMPP, используемый для передачи сообщений между вашим сервером приложений, клиентскими приложениями и Firebase Cloud Messaging (FCM). Ваш сервер приложений должен подключаться к этим конечным точкам:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
Доступные параметры и опции делятся на следующие категории:
- Синтаксис нисходящего сообщения
- Коды ответов об ошибках нисходящего сообщения
- Синтаксис восходящего сообщения
- Управляющие сообщения FCM
Синтаксис нисходящего сообщения
В этом разделе представлен синтаксис для отправки нисходящих сообщений.
Нисходящие сообщения XMPP (JSON)
В следующей таблице перечислены цели, параметры и полезные данные для сообщений XMPP JSON.
Параметр | Использование | Описание | |
---|---|---|---|
Цель | |||
to | Необязательно, строка | Этот параметр указывает получателя сообщения. Значением может быть токен регистрации устройства, ключ уведомления группы устройств или отдельная тема (с префиксом | |
condition | Необязательно, строка | Этот параметр определяет логическое выражение условий, определяющее цель сообщения. Поддерживаемое условие: тема в темах имеет формат «ваша тема». Это значение нечувствительно к регистру. Поддерживаемые операторы: | |
Параметры | |||
message_id | Обязательно, строка | Этот параметр однозначно идентифицирует сообщение в соединении XMPP. | |
collapse_key | Необязательно, строка | Этот параметр идентифицирует группу сообщений (например, с Нет никакой гарантии порядка отправки сообщений. Примечание. В любой момент времени допускается использование максимум 4 различных ключей свертывания. Это означает, что FCM может одновременно хранить 4 разных сообщения для каждого клиентского приложения. Если вы превысите это число, нет гарантии, какие 4 ключа свертывания сохранятся FCM . | |
priority | Необязательно, строка | Устанавливает приоритет сообщения. Допустимые значения: «нормальный» и «высокий». На платформах Apple они соответствуют приоритетам APN 5 и 10. По умолчанию сообщения уведомлений отправляются с высоким приоритетом, а сообщения с данными отправляются с обычным приоритетом. Обычный приоритет оптимизирует расход заряда батареи клиентского приложения, и его следует использовать, если не требуется немедленная доставка. Для сообщений с обычным приоритетом приложение может получить сообщение с неопределенной задержкой. Когда сообщение отправляется с высоким приоритетом, оно отправляется немедленно, и приложение может отображать уведомление. | |
content_available | Необязательно, логическое значение | На платформах Apple используйте это поле для представления | |
mutable_content | Необязательно, логическое значение JSON | На платформах Apple используйте это поле для представления | |
time_to_live | Дополнительно, номер | Этот параметр указывает, как долго (в секундах) сообщение должно храниться в хранилище FCM , если устройство находится в автономном режиме. Максимальное время поддержки — 4 недели, значение по умолчанию — 4 недели. Дополнительную информацию см. в разделе «Настройка срока жизни сообщения» . | |
dry_run | Необязательно, логическое значение | Если для этого параметра установлено значение Значение по умолчанию — | |
Полезная нагрузка | |||
data | Необязательно, объект | Этот параметр определяет пары ключ-значение полезных данных сообщения. Например, с На платформах Apple, если сообщение доставляется через APN, оно представляет собой настраиваемые поля данных. Если он доставлен FCM , он представлен как словарь значений ключей в В Android это приводит к созданию дополнительной именованной Ключ не должен быть зарезервированным словом («from», «message_type» или любым словом, начинающимся с «google» или «gcm»). Не используйте слова, определенные в этой таблице (например, Рекомендуется использовать значения строкового типа. Вам необходимо преобразовать значения в объектах или других нестроковых типах данных (например, целые или логические значения) в строку. | |
notification | Необязательно, объект | Этот параметр указывает предопределенные, видимые пользователю пары «ключ-значение» полезных данных уведомления. Подробности см. в разделе Поддержка полезных данных уведомлений. Дополнительные сведения об уведомлениях и параметрах сообщений с данными см. в разделе Типы сообщений . Если предоставлены полезные данные уведомления или для параметра content_available установлено значение true для сообщения на устройство Apple, сообщение отправляется через APN , в противном случае оно отправляется через FCM . |
Поддержка полезной нагрузки уведомлений
В следующих таблицах перечислены предопределенные ключи, доступные для создания уведомлений для платформ Apple и Android.
Параметр | Использование | Описание |
---|---|---|
title | Необязательно, строка | Название уведомления. Это поле не отображается на телефонах и планшетах. |
body | Необязательно, строка | Текст уведомления. |
sound | Необязательно, строка | Звук, который воспроизводится, когда устройство получает уведомление. Строка, определяющая звуковые файлы в основном пакете клиентского приложения или в папке |
badge | Необязательно, строка | Значение значка на значке приложения на главном экране. Если не указано, значок не изменяется. Если установлено значение |
click_action | Необязательно, строка | Действие, связанное с щелчком пользователя по уведомлению. Соответствует |
subtitle | Необязательно, строка | Подзаголовок уведомления. |
body_loc_key | Необязательно, строка | Ключ основной строки в строковых ресурсах приложения, используемый для локализации основного текста в соответствии с текущей локализацией пользователя. Соответствует Дополнительные сведения см. в разделе «Справочник по ключам полезной нагрузки» и «Локализация содержимого удаленных уведомлений» . |
body_loc_args | Необязательно, массив JSON в виде строки | Значения переменных строк, которые будут использоваться вместо спецификаторов формата в Соответствует Дополнительные сведения см. в разделе «Справочник по ключам полезной нагрузки» и «Локализация содержимого удаленных уведомлений» . |
title_loc_key | Необязательно, строка | Ключ строки заголовка в строковых ресурсах приложения, используемый для локализации текста заголовка в соответствии с текущей локализацией пользователя. Соответствует Дополнительные сведения см. в разделе «Справочник по ключам полезной нагрузки» и «Локализация содержимого удаленных уведомлений» . |
title_loc_args | Необязательно, массив JSON в виде строки | Значения переменных строк, которые будут использоваться вместо спецификаторов формата в Соответствует Дополнительные сведения см. в разделе «Справочник по ключам полезной нагрузки» и «Локализация содержимого удаленных уведомлений» . |
Параметр | Использование | Описание |
---|---|---|
title | Необязательно, строка | Название уведомления. |
body | Необязательно, строка | Текст уведомления. |
android_channel_id | Необязательно, строка | Идентификатор канала уведомления (новое в Android O). Приложение должно создать канал с этим идентификатором канала, прежде чем будет получено какое-либо уведомление с этим идентификатором канала. Если вы не отправляете этот идентификатор канала в запросе или если предоставленный идентификатор канала еще не создан приложением, FCM использует идентификатор канала, указанный в манифесте приложения. |
icon | Необязательно, строка | Значок уведомления. Устанавливает значок уведомления |
sound | Необязательно, строка | Звук, который воспроизводится, когда устройство получает уведомление. Поддерживает |
tag | Необязательно, строка | Идентификатор, используемый для замены существующих уведомлений в панели уведомлений. Если не указано, каждый запрос создает новое уведомление. Если указано и уведомление с таким же тегом уже отображается, новое уведомление заменяет существующее в панели уведомлений. |
color | Необязательно, строка | Цвет значка уведомления, выраженный в формате |
click_action | Необязательно, строка | Действие, связанное с щелчком пользователя по уведомлению. Если указано, действие с соответствующим фильтром намерений запускается, когда пользователь нажимает на уведомление. |
body_loc_key | Необязательно, строка | Ключ основной строки в строковых ресурсах приложения, используемый для локализации основного текста в соответствии с текущей локализацией пользователя. Дополнительные сведения см. в разделе «Строковые ресурсы» . |
body_loc_args | Необязательно, массив JSON в виде строки | Значения переменных строк, которые будут использоваться вместо спецификаторов формата в Дополнительную информацию см. в разделе «Форматирование и оформление» . |
title_loc_key | Необязательно, строка | Ключ строки заголовка в строковых ресурсах приложения, используемый для локализации текста заголовка в соответствии с текущей локализацией пользователя. Дополнительные сведения см. в разделе «Строковые ресурсы» . |
title_loc_args | Необязательно, массив JSON в виде строки | Значения переменных строк, которые будут использоваться вместо спецификаторов формата в Дополнительную информацию см. в разделе «Форматирование и оформление» . |
Параметр | Использование | Описание |
---|---|---|
title | Необязательно, строка | Название уведомления. |
body | Необязательно, строка | Текст уведомления. |
icon | Необязательно, строка | URL-адрес, который будет использоваться для значка уведомления. |
click_action | Необязательно, строка | Действие, связанное с щелчком пользователя по уведомлению. Для всех значений URL требуется HTTPS. |
Интерпретация ответа на нисходящее сообщение XMPP
В следующей таблице перечислены поля, которые появляются в ответном сообщении XMPP нисходящего потока.
Параметр | Использование | Описание |
---|---|---|
from | Обязательно, строка | Этот параметр указывает, кто отправил этот ответ. Значением является регистрационный токен клиентского приложения. |
message_id | Обязательно, строка | Этот параметр однозначно идентифицирует сообщение в соединении XMPP. Значение представляет собой строку, которая однозначно идентифицирует связанное сообщение. |
message_type | Обязательно, строка | Этот параметр указывает сообщение Если для значения установлено значение |
error | Необязательно, строка | Этот параметр указывает ошибку, связанную с нисходящим сообщением. Он устанавливается, когда message_type равен nack . Подробности смотрите в таблице 4 . |
error_description | Необязательно, строка | Этот параметр предоставляет описательную информацию об ошибке. Он устанавливается, когда message_type равен nack . |
Коды ответов об ошибках нисходящего сообщения
В следующей таблице перечислены коды ответов об ошибках для нисходящих сообщений.
Ошибка | XMPP-код | Рекомендуемое действие |
---|---|---|
Отсутствует регистрационный токен | INVALID_JSON | Убедитесь, что запрос содержит токен регистрации (в поле registration_id в текстовом сообщении или в поле to или registration_ids в JSON). |
Неверная регистрация APN | INVALID_JSON | При регистрации iOS убедитесь, что запрос на регистрацию от клиента содержит действительный токен APNs и идентификатор приложения. |
Неверный регистрационный токен | BAD_REGISTRATION | Проверьте формат регистрационного токена, который вы передаете на сервер. Убедитесь, что он соответствует регистрационному токену, который клиентское приложение получает при регистрации в FCM . Не обрезайте и не добавляйте дополнительные символы. |
Незарегистрированное устройство | DEVICE_UNREGISTERED | Существующий регистрационный токен может перестать быть действительным в ряде сценариев, в том числе:
|
Несоответствующий отправитель | SENDER_ID_MISMATCH | Регистрационный токен привязан к определенной группе отправителей. Когда клиентское приложение регистрируется в FCM , оно должно указать, каким отправителям разрешено отправлять сообщения. Вам следует использовать один из этих идентификаторов отправителя при отправке сообщений в клиентское приложение. Если вы переключитесь на другого отправителя, существующие регистрационные токены не будут работать. |
Неверный JSON | INVALID_JSON | Убедитесь, что сообщение JSON правильно отформатировано и содержит допустимые поля (например, убедитесь, что передан правильный тип данных). |
Сообщение слишком большое | INVALID_JSON | Убедитесь, что общий размер полезных данных, включенных в сообщение, не превышает ограничения FCM : 4096 байт для большинства сообщений или 2048 байт в случае сообщений в темах. Сюда входят как ключи, так и значения. |
Неверный ключ данных | INVALID_JSON | Убедитесь, что полезные данные не содержат ключ (например, from , gcm или любое значение с префиксом google ), который используется внутри FCM . Обратите внимание, что некоторые слова (например, collapse_key ) также используются FCM , но разрешены в полезных данных, и в этом случае значение полезных данных переопределяется значением FCM . |
Неверное время жизни | INVALID_JSON | Убедитесь, что значение, используемое в time_to_live является целым числом, представляющим продолжительность в секундах от 0 до 2 419 200 (4 недели). |
Неверное сообщение ACK | BAD_ACK | Прежде чем повторить попытку, убедитесь, что ack сообщение имеет правильный формат. Подробности смотрите в таблице 6 . |
Тайм-аут | SERVICE_UNAVAILABLE | Сервер не смог вовремя обработать запрос. Повторите тот же запрос, но необходимо:
Примечание. Отправители, вызывающие проблемы, рискуют попасть в черный список. |
Внутренняя ошибка сервера | INTERNAL_SERVER_ | Сервер обнаружил ошибку при попытке обработать запрос. Вы можете повторить тот же запрос, следуя требованиям, указанным в разделе «Тайм-аут» (см. строку выше). |
Превышена частота сообщений устройства | DEVICE_MESSAGE_RATE | Скорость отправки сообщений на конкретное устройство слишком высока. Уменьшите количество сообщений, отправляемых на это устройство, и не повторяйте отправку на это устройство немедленно. |
Превышено количество сообщений в темах | TOPICS_MESSAGE_RATE | Частота сообщений подписчикам по определенной теме слишком высока. Уменьшите количество сообщений, отправляемых по этой теме, и не повторяйте отправку немедленно. |
Соединение Дренаж | CONNECTION_DRAINING | Сообщение не удалось обработать, поскольку соединение разряжается. Это происходит потому, что FCM периодически необходимо закрывать соединение для балансировки нагрузки. Повторите отправку сообщения через другое соединение XMPP. |
Неверные учетные данные APN | INVALID_APNS_CREDENTIAL | Не удалось отправить сообщение, предназначенное для устройства iOS, поскольку необходимый ключ аутентификации APN не был загружен или срок его действия истек. Проверьте действительность своих учетных данных для разработки и производства. |
Аутентификация не удалась | AUTHENTICATION_FAILED | Не удалось пройти аутентификацию с помощью внешних служб push-уведомлений. Проверьте, используете ли вы правильные сертификаты Web Push. |
Синтаксис восходящего сообщения
Восходящее сообщение — это сообщение, которое клиентское приложение отправляет на сервер приложений. В настоящее время только XMPP поддерживает восходящий обмен сообщениями. Дополнительную информацию об отправке сообщений из клиентских приложений см. в документации вашей платформы.
Интерпретация восходящего сообщения XMPP
В следующей таблице описаны поля раздела XMPP, созданные FCM в ответ на запросы восходящих сообщений от клиентских приложений.
Параметр | Использование | Описание |
---|---|---|
from | Обязательно, строка | Этот параметр указывает, кто отправил сообщение. Значением является регистрационный токен клиентского приложения. |
category | Обязательно, строка | Этот параметр указывает имя пакета приложения клиентского приложения, отправившего сообщение. |
message_id | Обязательно, строка | Этот параметр указывает уникальный идентификатор сообщения. |
data | Необязательно, строка | Этот параметр определяет пары ключ-значение полезных данных сообщения. |
Отправка сообщения ACK
В следующей таблице описан ответ ACK, который сервер приложений должен отправить в FCM в ответ на восходящее сообщение, полученное сервером приложений.
Параметр | Использование | Описание |
---|---|---|
to | Обязательно, строка | Этот параметр указывает получателя ответного сообщения. Значение должно быть регистрационным токеном клиентского приложения, отправившего восходящее сообщение. |
message_id | Обязательно, строка | Этот параметр указывает, для какого сообщения предназначен ответ. Значение должно быть значением message_id из соответствующего восходящего сообщения. |
message_type | Обязательно, строка | Этот параметр указывает ack сообщение от сервера приложений в CCS. Для восходящих сообщений всегда должно быть установлено значение ack . |
Сообщения сервера FCM (XMPP)
Это сообщение, отправленное из FCM на сервер приложений. Вот основные типы сообщений, которые FCM отправляет на сервер приложений:
- Контроль: эти сообщения, созданные CCS, указывают на то, что требуется действие со стороны сервера приложений.
В следующей таблице описаны поля, включенные в сообщения, которые CCS отправляет на сервер приложений.
Параметр | Использование | Описание |
---|---|---|
Общее поле | ||
message_type | Обязательно, строка | Этот параметр указывает тип сообщения: управление. Если установлено значение |
control_type | Необязательно, строка | Этот параметр определяет тип управляющего сообщения, отправляемого из FCM . В настоящее время поддерживается только |