Google Cloud Messaging. Parte VI: Respuesta al envío de mensajes

The Google Cloud Messaging (GCM) guide can be found here and is available in English, therefore I am writing these related posts in Spanish.

Esta es la parte VI de un conjunto de entradas sobre Google Cloud Messaging (GCM).


Cuando desde nuestro servidor enviamos una solicitud de envío de mensaje al sistema de GCM, éste nos envía un mensaje de respuesta. Es muy importante que leamos e interpretemos este mensaje y no asumir que nuestro mensaje fue enviado correctamente.

Encontramos dos niveles de errores: un primer nivel donde el error se produce en el envío de nuestra solicitud a los servidores GCM, y un segundo nivel donde el error se produce en el propio contenido de la solicitud. La siguiente figura representa de forma esquemática cómo puede ser una respuesta del sistema de GCM. Se toma como base que la solicitud se construye en formato JSON, y por tanto, la respuesta también se recibe en este formato. Existe la posibilidad de que este mismo proceso se realice en texto plano.
Message response

Código HTTP

El código del estado de la respuesta HTTP puede tener los siguientes valores:

  • 200
    La solicitud ha sido recibida correctamente. En este caso debemos examinar el cuerpo de la respuesta tal y como vemos en la figura anterior.
  • 400
    La solicitud no pudo ser interpretada como JSON, o la estructura del JSON era incorrecta. En el contenido de la respuesta se incluye la descripción detallada del error ocurrido.
  • 401
    Error autenticando a nuestro servidor. Revisa que la API Key sea la correcta.
  • 5xx
    Error interno del sistema de GCM. No tenemos que hacer nada en este caso, tendremos que intentarlo más tarde.

Contenido JSON

Si la solicitud fue correcta y obtenemos el código 200, el contenido vendrá estructurado en formato JSON con los siguientes campos:

  • multicast_id.
    Identificador único de la solicitud.
  • success.
    Número de mensajes procesados correctamente. Hay que recordar que en una solicitud podemos indicar una lista de receptores.
  • failure.
    Número de mensajes con error.
  • canonical_ids.
    Número de resultados que incluyen identificadores canónicos. Un identificador canónico es el identificador de registro que debemos usar para un dispositivo concreto. Esto quiere decir que el identificador de registro que tenemos almacenado en nuestro servidor es incorrecto por existir otro más reciente. Puede producirse esta situación si por mal funcionamiento de nuestra aplicación cliente, se solicitan dos registros del mismo dispositivo al sistema de GCM.
  • results.
    Listado del estado concreto de cada uno de los mensajes (cada uno de los identificadores de registro enviados en la solicitud) con los siguientes posibles campos:

    • message_id.
      Si existe este campo, es porque el mensaje es correcto. Representa su identificador.
    • registration_id.
      Si existe este campo, quiere decir que este mensaje es uno de los que se han contado para el campo “canonical_ids”. Contiene el identificador de registro válido.
    • error.
      Tipo de error.

Tipos de error

Estos son los tipos de errores que pueden producirse para un receptor concreto:

  • NotRegistered.
    El identificador ya no está registrado en GCM. Debe ser borrado de tu servidor.
  • MessageTooBig.
    El tamaño del mensaje no puede exceder los 4096 bytes.
  • MismatchSenderId.
    El grupo de emisores de los mensajes que puede recibir el identificador de registro no coincide con tu servidor.
  • MissingRegistration.
    No se encontraron identificadores de registro a quienes enviar el mensaje.
  • InternalServerError.
    Error en GCM, por lo que podemos intentar enviar la solicitud de nuevo. Puede producirse también como código HTTP 500.
  • InvalidDataKey.
    Los datos del mensaje contienen una clave que no puede ser usada debido a que es una clave que se usa internamente por GCM. Tendrás que cambiar el nombre de tu clave.
  • InvalidPackageName.
    El nombre del paquete asociado el identificador de registro no se corresponde con el de nuestra API key.
  • InvalidRegistration.
    El identificador de registro es incorrecto. Comprueba que se están enviando, guardando y recuperando correctamente.
  • InvalidTtl.
    El campo del tiempo de vida del mensaje no es válido. Recuerda que debe ser un entero entre 0 y 2.419.200 que representa segundos, el máximo son 4 semanas.
  • Unavailable.
    El servidor GCM tardó mucho tiempo en procesar la solicitud, por lo que podemos intentar enviar la solicitud de nuevo. Puede producirse también como código HTTP 500.

 

Leer Más