Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

Вы можете использовать обмен сообщениями группы устройств через устаревшие протоколы 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 ), которым не удалось получить сообщение:

{
  "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 .

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

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

Следующий вызов FCM отправляет восходящее сообщение на ключ уведомления.

Firebase.Messaging.Message message;
message.To = notification_key;
message.MessageId = a_unique_message_id;
message.Data["hello"] = "world";
Firebase.Messaging.FirebaseMessaging.Send(message);