Google Cloud Messaging

Advertencia

Google anunció que GCM caería en desuso a partir del 10 de abril de 2018. Es posible que los siguientes documentos y proyectos de ejemplo dejen de recibir mantenimiento. Las API de cliente y servidor GCM de Google se quitarán tan pronto como el 29 de mayo de 2019. Google recomienda migrar las aplicaciones de GCM a Firebase Cloud Messaging (FCM). Para más información sobre la puesta en desuso y la migración de GCM, consulte Desuso de Google Cloud Messaging.

Para empezar a usar Firebase Cloud Messaging con Xamarin, consulte Firebase Cloud Messaging.

Google Cloud Messaging (GCM) es un servicio que facilita la mensajería entre aplicaciones móviles y aplicaciones de servidor. En este artículo se proporciona información general sobre cómo funciona GCM y se explica cómo configurar Google Services para que la aplicación pueda usar GCM.

Google Cloud Messaging logo

En este tema se proporciona información general sobre cómo Google Cloud Messaging enruta los mensajes entre la aplicación y un servidor de aplicaciones, y proporciona un procedimiento detallado para adquirir credenciales para que la aplicación pueda usar el servicio GCM.

Información general

Google Cloud Messaging (GCM) es un servicio que controla el envío, enrutamiento y puesta en cola de mensajes entre aplicaciones de servidor y aplicaciones cliente para dispositivos móviles. Una aplicación cliente es una aplicación habilitada para GCM que se ejecuta en un dispositivo. El servidor de aplicaciones (proporcionado por usted o su empresa) es el servidor habilitado para GCM con el que se comunica la aplicación cliente mediante GCM:

GCM resides between the client app and the app server

Con GCM, los servidores de aplicaciones pueden enviar mensajes a un único dispositivo, a un grupo de dispositivos o a una serie de dispositivos que están suscritos a un tema. La aplicación cliente puede usar GCM para suscribirse a mensajes de bajada de un servidor de aplicaciones (por ejemplo, para recibir notificaciones remotas). Además, GCM permite que las aplicaciones cliente envíen mensajes ascendentes al servidor de aplicaciones.

Funcionamiento de Google Cloud Messaging

Cuando los mensajes de bajada se envían desde un servidor de aplicaciones a una aplicación cliente, el servidor de aplicaciones envía el mensaje a un servidor de conexión de GCM y este, a su vez, reenvía el mensaje a un dispositivo que ejecuta la aplicación cliente. Los mensajes se pueden enviar a través de HTTP o XMPP (protocolo extensible de mensajería y presencia). Dado que las aplicaciones cliente no siempre están conectadas o en ejecución, el servidor de conexión de GCM pone en cola y almacena mensajes, y los envía a las aplicaciones cliente a medida que se vuelven a conectar y están disponibles. Del mismo modo, GCM pondrá en cola los mensajes ascendentes de la aplicación cliente al servidor de aplicaciones si este no está disponible.

GCM usa las siguientes credenciales para identificar el servidor de aplicaciones y la aplicación cliente, y usa estas credenciales para autorizar transacciones de mensajes mediante GCM:

  • Clave de API: la clave de API proporciona al servidor de aplicaciones acceso a los servicios de Google; GCM usa esta clave para autenticar el servidor de aplicaciones. Para poder usar el servicio GCM, primero debe obtener una clave de API de la consola de Google para desarrolladores mediante la creación de un proyecto. La clave de API debe protegerse; para más información sobre cómo proteger la clave de API, consulte Procedimientos recomendados para el uso de claves de API de forma segura.

  • Id. de remitente: el identificador de remitente autoriza al servidor de aplicaciones en la aplicación cliente, es un número exclusivo que identifica al servidor de aplicaciones que puede enviar mensajes a la aplicación cliente. El identificador del remitente también es el número del proyecto; puede obtener el identificador del remitente de la consola de Google para desarrolladores al registrar el proyecto.

  • Token de registro: el token de registro es la identidad de GCM de la aplicación cliente en un dispositivo determinado. El token de registro se genera en tiempo de ejecución: la aplicación recibe un token de registro cuando se registra por primera vez con GCM mientras se ejecuta en un dispositivo. El token de registro autoriza a una instancia de la aplicación cliente (que se ejecuta en ese dispositivo determinado) para recibir mensajes de GCM.

  • Id. de aplicación: la identidad de la aplicación cliente (independiente del dispositivo en cuestión) que se registra para recibir mensajes de GCM. En Android, el identificador de aplicación es el nombre del paquete registrado en AndroidManifest.xml como, por ejemplo, com.xamarin.gcmexample.

La configuración de Google Cloud Messaging (más adelante en esta guía) proporciona instrucciones detalladas para crear un proyecto y generar estas credenciales.

En las secciones siguientes se explica cómo se usan estas credenciales cuando las aplicaciones cliente se comunican con los servidores de aplicaciones a través de GCM.

Registro en GCM

Una aplicación cliente instalada en un dispositivo debe registrarse primero en GCM para poder enviar mensajes. La aplicación cliente debe completar los pasos de registro que se muestran en el diagrama siguiente:

App registration steps

  1. La aplicación cliente se pone en contacto con GCM para obtener un token de registro, pasando el identificador del remitente a GCM.

  2. GCM devuelve un token de registro a la aplicación cliente.

  3. La aplicación cliente reenvía el token de registro al servidor de aplicaciones.

El servidor de aplicaciones almacena en caché el token de registro para las comunicaciones posteriores con la aplicación cliente. Opcionalmente, el servidor de aplicaciones puede devolver una confirmación a la aplicación cliente para indicar que se recibió el token de registro. Después de que se produce este protocolo de enlace, la aplicación cliente puede recibir mensajes del servidor de aplicaciones (o enviar mensajes a este).

Cuando la aplicación cliente ya no quiere recibir mensajes del servidor de aplicaciones, puede enviar una solicitud al servidor de aplicaciones para eliminar el token de registro. Si la aplicación cliente recibe mensajes de tema (esto se explica más adelante en este artículo), puede cancelar la suscripción al tema. Si la aplicación cliente se desinstala de un dispositivo, GCM lo detecta y notifica automáticamente al servidor de aplicaciones que elimine el token de registro.

Mensajería de bajada

Cuando el servidor de aplicaciones envía un mensaje de bajada a la aplicación cliente, sigue los pasos que se muestran en el diagrama siguiente:

Downstream messaging store and forward diagram

  1. El servidor de aplicaciones envía el mensaje a GCM.

  2. Si el dispositivo cliente no está disponible, el servidor GCM almacena el mensaje en una cola para su transmisión posterior.

  3. Cuando el dispositivo cliente está disponible, GCM envía el mensaje a la aplicación cliente en ese dispositivo.

  4. La aplicación cliente recibe el mensaje de GCM y lo administra como corresponde. Por ejemplo, si el mensaje es una notificación remota, se presenta al usuario.

En este escenario de mensajería (donde el servidor de aplicaciones envía un mensaje a una sola aplicación cliente), los mensajes pueden tener hasta 4kB de tamaño.

Para obtener información detallada (incluidos ejemplos de código) sobre cómo recibir mensajes GCM de bajada en Android, consulte Notificaciones remotas.

Mensajería de temas

La mensajería de temas es un tipo de mensajería de bajada en la que el servidor de aplicaciones envía un único mensaje a varios dispositivos de aplicación cliente que se suscriben a un tema (por ejemplo, una previsión meteorológica). Los mensajes de temas pueden tener hasta 2 KB de tamaño y la mensajería de temas admite hasta un millón de suscripciones por aplicación. Si GCM solo se usa para la mensajería de temas, la aplicación cliente no es necesaria para enviar un token de registro al servidor de aplicaciones.

Mensajería de grupo

La mensajería de grupo es un tipo de mensajería de bajada en la que el servidor de aplicaciones envía un único mensaje a varios dispositivos de la aplicación cliente que pertenecen a un grupo (por ejemplo, un grupo de dispositivos que pertenecen a un solo usuario). Los mensajes de grupo pueden tener hasta 2 KB de tamaño para dispositivos iOS y hasta 4KB para dispositivos Android. Un grupo está limitado a un máximo de 20 miembros.

Mensajería ascendente

Si la aplicación cliente se conecta a un servidor que admite XMPP, puede devolver mensajes al servidor de aplicaciones, como se muestra en el diagrama siguiente:

Upstream messaging diagram

  1. La aplicación cliente envía un mensaje al servidor de conexión XMPP de GCM.

  2. Si el servidor de aplicaciones está desconectado, el servidor GCM almacena el mensaje en una cola para su posterior reenvío.

  3. Cuando el servidor de aplicaciones se vuelve a conectar, GCM reenvía el mensaje al servidor de aplicaciones.

  4. El servidor de aplicaciones analiza el mensaje para comprobar la identidad de la aplicación cliente y, a continuación, envía una "confirmación" a GCM para confirmar la recepción del mensaje.

  5. El servidor de aplicaciones procesa el mensaje.

Mensajes ascendentes de Google explica cómo estructurar los mensajes codificados en JSON y enviarlos a servidores de aplicaciones que ejecutan el servidor de conexión en la nube basado en XMPP de Google.

Configuración de Google Cloud Messaging

Para poder usar los servicios GCM en la aplicación, primero debe adquirir credenciales para acceder a los servidores GCM de Google. En las secciones siguientes se describen los pasos necesarios para completar este proceso:

Habilitación de Google Services para la aplicación

  1. Inicie sesión en la consola de Google para desarrolladores con su cuenta de Google (es decir, su dirección de Gmail) y cree un proyecto. Si tiene un proyecto existente, elija el proyecto que desea habilitar para GCM. En el ejemplo siguiente, se crea un nuevo proyecto denominado XamarinGCM:

    Creating XamarinGCM project

  2. A continuación, escriba el nombre del paquete de la aplicación (en este ejemplo, el nombre del paquete es com.xamarin.gcmexample) y haga clic en Continuar para elegir y configurar los servicios:

    Entering the package name

    Tenga en cuenta que este nombre de paquete también es el identificador de la aplicación.

  3. En la sección Elegir y configurar los servicios se enumeran los servicios de Google que puede agregar a la aplicación. Haga clic en Cloud Messaging:

    Choose Cloud Messaging

  4. A continuación, haga clic en HABILITAR GOOGLE CLOUD MESSAGING:

    Enable Google Cloud Messaging

  5. Se genera una clave de API de servidor y un identificador de remitente para la aplicación. Registre estos valores y haga clic en CERRAR:

    Server API Key and Sender ID displayed

    Proteja la clave de API: no está pensada para uso público. Si la clave de API está en peligro, los servidores no autorizados podrían publicar mensajes en las aplicaciones cliente. Los procedimientos recomendados para usar claves de API de forma segura proporcionan directrices útiles para proteger la clave de API.

Ver la configuración del proyecto

Para ver la configuración del proyecto en cualquier momento, inicie sesión en Google Cloud Console y seleccione el proyecto. Por ejemplo, puede ver el identificador del remitente seleccionando el proyecto en el menú desplegable de la parte superior de la página (en este ejemplo, el proyecto se denomina XamarinGCM). El identificador del remitente es el número de proyecto, tal como se muestra en esta captura de pantalla (el identificador del remitente aquí es 9349932736):

Viewing the Sender ID

Para ver la clave de API, haga clic en Administrador de API y, a continuación, haga clic en Credenciales:

Viewing the API key

Información adicional

  • RFC 6120 y RFC 6121 explican y definen el protocolo extensible de mensajería y presencia (XMPP).

Resumen

En este artículo se proporciona información general sobre Google Cloud Messaging (GCM). Explicó las distintas credenciales que se usan para identificar y autorizar la mensajería entre los servidores de aplicaciones y las aplicaciones cliente. Ilustra los escenarios de mensajería más habituales y detalla los pasos para registrar la aplicación en GCM para usar los servicios de GCM.