Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Отправка сообщений группам устройств на C++

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

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

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

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

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

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

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

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

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

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

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

POST-запрос HTTP

Отправьте следующий запрос на 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 было уникальным для каждого клиентского приложения, если у вас есть несколько клиентских приложений для одного и того же идентификатора отправителя . Это гарантирует, что сообщения отправляются только в предполагаемое целевое приложение.

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

Успешный запрос возвращает 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 , и предоставьте токены регистрации для добавления или удаления.

POST-запрос HTTP

Например, чтобы добавить устройство с токеном регистрации 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 параметра 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 ( 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 не удается доставить сообщение на все устройства в группе. Сервер приложений получит ответ nack.

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