Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Отправлять сообщения группам устройств на Android

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

Вы можете использовать устройство группового обмена сообщениями с помощью унаследованного XMPP или HTTP протоколы на вашем сервере приложений. Firebase Admin SDK для Node.js на основе устаревших протоколов также предоставляют возможности обмена сообщений групп устройств. Максимальное количество членов, разрешенное для ключа уведомления - 20.

Управление группами устройств

Перед отправкой сообщений группе устройств необходимо:

  1. Получите регистрационные токены для каждого устройства, которое хотите добавить в группу.

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

Базовое управление группами устройств - создание и удаление групп, а также добавление или удаление устройств - выполняется через сервер приложений. Смотрите наследство ссылки протокола HTTP для получения списка поддерживаемых ключей.

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

Создание группы устройств

Чтобы создать группу устройств, отправьте запрос POST, который предоставляет имя для группы и список токенов регистрации для устройств. FCM возвращает новый notification_key , представляющий группу устройств.

HTTP POST запрос

Отправить запрос , как следующее https://fcm.googleapis.com/fcm/notification :

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

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

Формат ответа

Успешный запрос возвращает notification_key вроде следующего:

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

Сохраните notification_key и соответствующий notification_key_name для использования в последующих операциях.

Получение ключа уведомления

Если вам нужно получить существующий ключ уведомления, используйте notification_key_name в запросе GET , как показано ниже:

https://fcm.googleapis.com/fcm/notification?notification_key_name=appUser-Chris
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID
{}

Для каждого запроса GET для данного имени ключа уведомления сервер возвращает уникальную закодированную строку. Хотя каждая строка может выглядеть как отдельный ключ, на самом деле это действительное значение «notification_key».

Добавление и удаление устройств из группы устройств

Чтобы добавить или удалить устройства из существующей группы, послать запрос POST с operation набором параметров , чтобы add или remove , и предоставлять регистрационные маркера для добавления или удаления.

HTTP POST запрос

Например, чтобы добавить устройство с регистрацией маркеров bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... к appUser-Chris , вы бы отправить этот запрос:

{
   "operation": "add",
   "notification_key_name": "appUser-Chris",
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."]
}

Формат ответа

Успешный запрос либо добавить или удалить устройство возвращает notification_key вроде следующего:

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

Отправка нисходящих сообщений группам устройств

Отправка сообщений группе устройств очень похожа на отправку сообщений отдельному устройству. Установите to параметра уникального ключа уведомления для группы устройств. См Типы сообщений для подробной информации о поддержке полезной нагрузки. Примеры на этой странице показывают, как отправлять сообщения с данными группам устройств по протоколам HTTP и XMPP.

HTTP-запрос POST группы устройств

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

HTTP-ответ группы устройств

Вот пример «успеха» - notification_key имеет 2 регистрационные маркеры , связанные с ним, и сообщение было успешно отправлено на оба из них:

{
  "success": 2,
  "failure": 0
}

Вот пример «частичного успеха» - notification_key имеет 3 регистрации лексемы , связанные с ним. Сообщение было успешно отправлено только на 1 из токенов регистрации. Перечни сообщение ответ регистрационные маркеры ( registration_ids ) , которые не удалось получить сообщение:

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

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

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

{
  "success": 0,
  "failure": 0
}

Сообщение XMPP группы устройств

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

Ответ XMPP группы устройств

Когда сообщение успешно отправлено на любое из устройств в группе, сервер соединений XMPP отвечает ACK. Если все сообщения, отправленные на все устройства в группе, терпят неудачу, сервер соединений XMPP отвечает NACK.

Вот пример «успеха» - notification_key имеет 3 регистрационные маркеры , связанные с ним, и сообщение было успешно отправлено на все из них:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

Вот пример «частичного успеха» - notification_key имеет 3 регистрации лексемы , связанные с ним. Сообщение было успешно отправлено только на 1 из токенов регистрации. В ответном сообщении перечислены токены регистрации, которым не удалось получить сообщение:

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

Когда сервер соединений FCM не может доставить на все устройства в группе. Сервер приложений получит ответ «нет».

Для полного списка опций сообщения см справочной информации для выбранного протокола сервера связи с этим , HTTP или XMPP .