Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Enviar mensajes a grupos de dispositivos en C++

La mensajería de grupo de dispositivos le permite agregar varios dispositivos a un solo grupo. Esto es similar a la mensajería de temas, pero incluye autenticación para garantizar que la membresía del grupo sea administrada solo por sus servidores. Por ejemplo, si desea enviar diferentes mensajes a diferentes modelos de teléfonos, sus servidores pueden agregar/eliminar registros a los grupos apropiados y enviar el mensaje apropiado a cada grupo. La mensajería de grupos de dispositivos se diferencia de la mensajería de temas en que implica administrar grupos de dispositivos desde sus servidores en lugar de directamente dentro de su aplicación.

Puede usar la mensajería de grupos de dispositivos a través de los protocolos heredados XMPP o HTTP en su servidor de aplicaciones. Las versiones anteriores del SDK de administrador de Firebase para Node.js se basan en los protocolos heredados y también brindan capacidades de mensajería de grupo de dispositivos. El número máximo de miembros permitidos para una clave de notificación es 20.

Administrar grupos de dispositivos

Antes de enviar mensajes a un grupo de dispositivos, debe:

  1. Obtenga tokens de registro para cada dispositivo que desee agregar al grupo.

  2. Cree la notification_key , que identifica el grupo de dispositivos asignando un grupo en particular (generalmente un usuario) a todos los tokens de registro asociados del grupo. Puede crear claves de notificación en el servidor de aplicaciones.

La gestión básica de los grupos de dispositivos (creación y eliminación de grupos y adición o eliminación de dispositivos) se realiza a través del servidor de aplicaciones. Consulte la referencia del protocolo HTTP heredado para obtener una lista de claves admitidas.

Administrar grupos de dispositivos en el servidor de aplicaciones

Creación de un grupo de dispositivos

Para crear un grupo de dispositivos, envíe una solicitud POST que proporcione un nombre para el grupo y una lista de tokens de registro para los dispositivos. FCM devuelve una nueva clave de notification_key que representa el grupo de dispositivos.

Solicitud HTTP POST

Envíe una solicitud como la siguiente a 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...",
                        ... ]

El notification_key_name es un nombre o identificador (por ejemplo, puede ser un nombre de usuario) que es único para un grupo determinado. El notification_key_name y la notification_key son únicos para un grupo de tokens de registro. Es importante que el notification_key_name sea único por aplicación cliente si tiene varias aplicaciones cliente para el mismo ID de remitente . Esto garantiza que los mensajes solo vayan a la aplicación de destino deseada.

Formato de respuesta

Una solicitud exitosa devuelve una clave de notification_key como la siguiente:

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

Guarde la notification_key y el notification_key_name correspondiente para usar en operaciones posteriores.

Recuperar una clave de notificación

Si necesita recuperar una clave de notificación existente, use el notification_key_name en una solicitud GET como se muestra:

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

Para cada solicitud GET para un nombre de clave de notificación dado, el servidor devuelve una cadena codificada única. Aunque cada cadena puede parecer una clave diferente, en realidad es un valor válido de `notification_key`.

Adición y eliminación de dispositivos de un grupo de dispositivos

Para agregar o eliminar dispositivos de un grupo existente, envíe una solicitud POST con el parámetro de operation establecido para add o remove , y proporcione los tokens de registro para agregar o eliminar.

Solicitud HTTP POST

Por ejemplo, para agregar un dispositivo con el token de registro bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... a appUser-Chris , enviaría esta solicitud:

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

Formato de respuesta

Una solicitud exitosa para agregar o eliminar un dispositivo devuelve una clave de notification_key como la siguiente:

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

Envío de mensajes descendentes a grupos de dispositivos

Enviar mensajes a un grupo de dispositivos es muy similar a enviar mensajes a un dispositivo individual. Establezca el parámetro to en la clave de notificación única para el grupo de dispositivos. Consulte Tipos de mensajes para obtener detalles sobre el soporte de carga útil. Los ejemplos de esta página muestran cómo enviar mensajes de datos a grupos de dispositivos en los protocolos heredados HTTP y XMPP.

Solicitud POST HTTP de grupo de dispositivos

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!",
   }
}

Respuesta HTTP del grupo de dispositivos

Este es un ejemplo de "éxito": la notification_key tiene 2 tokens de registro asociados y el mensaje se envió correctamente a ambos:

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

Este es un ejemplo de "éxito parcial": la notification_key tiene 3 tokens de registro asociados. El mensaje se envió con éxito solo a 1 de los tokens de registro. El mensaje de respuesta enumera los tokens de registro ( registration_ids ) que no pudieron recibir el mensaje:

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

Cuando un mensaje no se entrega a uno o más de los tokens de registro asociados con una notification_key , el servidor de la aplicación debe volver a intentarlo con un retroceso entre reintentos.

Si el servidor intenta enviar un mensaje a un grupo de dispositivos que no tiene miembros, la respuesta es similar a la siguiente, con 0 éxitos y 0 errores:

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

Mensaje XMPP del grupo de dispositivos

<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>

Respuesta XMPP del grupo de dispositivos

Cuando el mensaje se envía correctamente a cualquiera de los dispositivos del grupo, el servidor de conexión XMPP responde con un ACK. Si todos los mensajes enviados a todos los dispositivos del grupo fallan, el servidor de conexión XMPP responde con un NACK.

Este es un ejemplo de "éxito": la notification_key tiene 3 tokens de registro asociados y el mensaje se envió con éxito a todos ellos:

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

Este es un ejemplo de "éxito parcial": la notification_key tiene 3 tokens de registro asociados. El mensaje se envió con éxito solo a 1 de los tokens de registro. El mensaje de respuesta enumera los tokens de registro que no pudieron recibir el mensaje:

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

Cuando el servidor de conexión de FCM no puede entregar a todos los dispositivos del grupo. El servidor de aplicaciones recibirá una respuesta negativa.

Para ver la lista completa de opciones de mensajes, consulte la información de referencia del protocolo de servidor de conexión elegido, HTTP o XMPP .