Обмен сообщениями между группами устройств позволяет добавлять несколько устройств в одну группу. Это похоже на обмен сообщениями по темам, но включает аутентификацию, чтобы гарантировать, что членство в группе управляется только вашими серверами. Например, если вы хотите отправлять разные сообщения на разные модели телефонов, ваши серверы могут добавлять / удалять регистрации в соответствующие группы и отправлять соответствующее сообщение каждой группе. Обмен сообщениями между группами устройств отличается от обмена сообщениями по темам тем, что он включает управление группами устройств с ваших серверов, а не непосредственно в вашем приложении.
Вы можете использовать обмен сообщениями группы устройств через устаревшие протоколы XMPP или HTTP на сервере приложений. Firebase Admin SDK для Node.js, основанный на устаревших протоколах, также предоставляет возможности обмена сообщениями между группами устройств. Максимальное количество членов, разрешенное для ключа уведомления - 20.
Управление группами устройств
Перед отправкой сообщений группе устройств необходимо:
Получите регистрационные токены для каждого устройства, которое хотите добавить в группу.
Создайте
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": ["4", "8", "15", "16", "23", "42"] }
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
, и предоставьте маркеры регистрации для добавления или удаления.
HTTP POST запрос
Например, чтобы добавить устройство с регистрационным идентификатором 51 в appUser-Chris, вы должны отправить этот запрос:
{
"operation": "add",
"notification_key_name": "appUser-Chris",
"notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
"registration_ids": ["51"]
}
Формат ответа
Успешный запрос на добавление или удаление устройства возвращает 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 из токенов регистрации. В ответном сообщении перечислены токены регистрации, которым не удалось получить сообщение:
{ "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 .