Обмен сообщениями группы устройств позволяет добавлять несколько устройств в одну группу. Это похоже на обмен сообщениями в теме, но включает аутентификацию, чтобы гарантировать, что членство в группе управляется только вашими серверами. Например, если вы хотите отправлять разные сообщения на разные модели телефонов, ваши серверы могут добавлять/удалять регистрации в соответствующие группы и отправлять соответствующее сообщение каждой группе. Обмен сообщениями с группами устройств отличается от обмена сообщениями по темам тем, что он включает в себя управление группами устройств с ваших серверов, а не непосредственно в вашем приложении.
Вы можете использовать обмен сообщениями группы устройств через устаревшие протоколы XMPP или HTTP на вашем сервере приложений. Старые версии Firebase Admin SDK для Node.js основаны на устаревших протоколах и также предоставляют возможности обмена сообщениями для групп устройств. Максимальное количество участников, разрешенное для ключа уведомления, равно 20.
Управление группами устройств
Перед отправкой сообщений группе устройств необходимо:
Получите регистрационные токены для каждого устройства, которое вы хотите добавить в группу.
Создайте
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 .