Mensajes a grupos de dispositivos en Unity

Con los mensajes a grupos de dispositivos, puedes enviar un mismo mensaje a varias instancias de una app que se ejecutan en dispositivos pertenecientes a un grupo. Por lo general, el "grupo" es un conjunto de dispositivos diferentes que pertenecen al mismo usuario. Todos los dispositivos de un grupo comparten la misma clave de notificación, que corresponde al token que FCM usa para distribuir mensajes a todos los dispositivos del grupo.

Puedes usar mensajes a grupos de dispositivos con los SDK de Admin o mediante la implementación de protocolos XMPP o HTTP en tu servidor de apps. La cantidad máxima de miembros permitida para una clave de notificación es de 20.

Administra grupos de dispositivos

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

  1. Obtener los tokens de registro de cada dispositivo que desees agregar al grupo.

  2. Crear la notification_key, que identifica el grupo de dispositivos mediante la asignación de un grupo específico (por lo general, un usuario) a todos los tokens de registro relacionados del grupo. Puedes crear claves de notificación en el servidor de apps o en las apps cliente de Android.

La administración básica de grupos de dispositivos (crear y quitar grupos y agregar o quitar dispositivos) se ejecuta comúnmente a través del servidor de apps. Consulta la referencia heredada del protocolo HTTP para ver una lista de claves compatibles.

De manera opcional, las apps cliente de Android pueden administrar grupos de dispositivos desde el cliente.

Administra grupos de dispositivos en el servidor de apps

Crea un grupo de dispositivos

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

Solicitud HTTP POST

Envía a https://android.googleapis.com/gcm/notification una solicitud como la siguiente:

https://android.googleapis.com/gcm/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"]
}

El notification_key_name es un nombre o identificador (p. ej., puede ser un nombre de usuario) que es único para un grupo determinado. El notification_key_name y la notification_key son únicos en un grupo de tokens de registro. Es importante que el notification_key_name sea único en cada app cliente si tienes varias apps cliente para el mismo ID de remitente. Esto garantiza que los mensajes se envíen solo a la app de destino correcta.

Formato de respuesta

Una solicitud correcta muestra una notification_key como la siguiente:

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

Guarda la notification_key y el notification_key_name correspondiente para usarlos en otras operaciones.

Recuperar una clave de notificación

Si necesitas recuperar una clave de notificación existente, usa notification_key_name en una solicitud GET de la siguiente manera:

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

Para cada solicitud GET por un nombre de clave de notificación determinado, el servidor muestra un string codificado único. Si bien cada string puede parecer una clave diferente, en realidad es un valor válido para "notification_key".

Agrega y quita dispositivos desde un grupo de dispositivos

Para agregar o quitar dispositivos desde un grupo existente, envía una solicitud POST con los valores operation o add en el parámetro remove y proporciona los tokens de registro para agregarlos o quitarlos.

Solicitud HTTP POST

Por ejemplo, para agregar un dispositivo con el ID de registro 51 a appUser-Chris, debes enviar esta solicitud:

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

Formato de respuesta

Una solicitud correcta para agregar o quitar un dispositivo muestra una notification_key como la siguiente:

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

Envía mensajes descendentes a grupos de dispositivos

Enviar mensajes a un grupo de dispositivos es muy similar a enviar mensajes a un dispositivo individual. Establece el parámetro to como la clave de notificación única para el grupo de dispositivos. Consulta los tipos de mensaje para conocer los detalles de la compatibilidad de cargas útiles. Los ejemplos en esta página muestran cómo enviar mensajes de datos a grupos de dispositivos en protocolos HTTP y XMPP.

Solicitud HTTP POST del 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

A continuación, se muestra un ejemplo de un resultado correcto: notification_key tiene 2 tokens de registro asociados y el mensaje se envió correctamente a ambos:

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

A continuación, se muestra un ejemplo de un resultado parcialmente correcto: notification_key tiene 3 tokens de registro asociados. El mensaje se envió correctamente a solo 1 de los tokens de registro. El mensaje de respuesta muestra una lista de los tokens de registro que no recibieron el mensaje:

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

Cuando un mensaje no se puede entregar a uno o más tokens de registro asociados con una notification_key, el servidor de apps debe volver a intentar la operación tras esperar un período de retirada.

Si el servidor intenta enviar un mensaje a un grupo de dispositivos que no tiene miembros, la respuesta luce como el siguiente ejemplo, con 0 resultados correctos 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 un mensaje se envía correctamente a cualquiera de los dispositivos del grupo, el servidor de conexiones XMPP responde con un ACK. Si todos los mensajes enviados a todos los dispositivos del grupo fallan, el servidor de conexiones XMPP responde con un NACK.

A continuación, se muestra un ejemplo de un resultado correcto: notification_key tiene 3 tokens de registro asociados y el mensaje se envió correctamente a todos ellos.

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

A continuación, se muestra un ejemplo de un resultado parcialmente correcto: notification_key tiene 3 tokens de registro asociados. El mensaje se envió correctamente a solo 1 de los tokens de registro. El mensaje de respuesta muestra una lista de los tokens de registro que no recibieron el mensaje:

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

Cuando el servidor de conexiones de FCM no puede entregar el mensaje a todos los dispositivos en el grupo, el servidor de apps recibe una respuesta NACK.

Para ver la lista completa de opciones de mensaje, consulta la información de referencia para el protocolo de servidor de conexiones HTTP o XMPP que seleccionaste.

Envía mensajes ascendentes a grupos de dispositivos

Las apps cliente pueden enviar mensajes ascendentes a grupos de dispositivos. Para hacerlo, deben dirigir los mensajes a la clave de notificación apropiada en el campo to.

La siguiente llamada a FCM envía un mensaje ascendente a una clave de notificación.

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

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.