Google Cloud Messaging. Parte III: Aplicación cliente

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 III de un conjunto de entradas sobre Google Cloud Messaging (GCM).


Los pasos que vamos a seguir en nuestra aplicación Android para que juegue el rol de cliente y reciba los mensajes de nuestro servidor son los siguientes:

  • Instalar la librería de GCM.
  • Añadir los permisos al archivo “AndroidManifest.xml”.
  • Implementar el código para registrarse al servicio (y darse de baja).
  • Implementar el código del servicio que va a recibir los intents.

En esta parte sobre GCM, vamos a entrar en detalle sobre los dos primeros puntos. Los dos últimos se expondrán en la siguiente parte.

Librería GCM

En este tutorial vamos a instalar una librería adicional en nuestro SDK de Android que nos va facilitar la implementación del cliente de GCM. Puede realizarse igualmente sin el uso de esta librería, pero el código es mucho más sencillo e intuitivo haciendo uso de ella.

Abrimos el SDK Manager y en la sección de “Extras” seleccionamos “Google Cloud Messaging for Android Library”.

SDK manager

La instalamos y tras finalizar, en el directorio donde tenemos la instalación del SDK, dentro de la ruta “/extras/google/” se ha creado la carpeta llamada “gcm” que a su vez contiene las carpetas “gcm-client”, “gcm-server” y “samples”. Dentro del directorio “gcm-client/dist” encontramos el archivo “gcm.jar”, el cual debemos importar en nuestra aplicación.

Actualización!!

El paquete de GCM ya no se encuentra como “Google Cloud Messaging for Android Library”, ahora forma parte de “Google Play services” que se encuentra también en la sección de “Extras”.

Para saber cómo añadir Google Play Services a vuestro proyecto podéis seguir la guía oficial aquí.

 

Android Manifest

El siguiente paso que podemos seguir, es modificar el archivo “AndroidManifest.xml” para configurarlo correctamente.

  • Si el uso de GCM es imprescindible para nuestra aplicación, debemos establecer la mínima versión del SDK, a la 8, es decir, Android 2.2.
    <uses-sdk android:minSdkVersion="8" ... />
  • Añadimos permisos para evitar que otras aplicaciones se registren y reciban los mensajes de nuestra aplicación. Debemos especificar el mismo nombre que el del paquete de nuestra aplicación (que se encuentra también indicado en el propio manifest).
    <permission android:name="my_pack.permission.C2D_MESSAGE"
       android:protectionLevel="signature"/>
    <uses-permission android:name="my_pack.permission.C2D_MESSAGE"/>
  • Añadimos el resto de permisos.
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

    “GET_ACCOUNTS” nos permite acceder a la cuenta de Google del dispositivo, la cual es necesaria si la versión instalada es inferior a Android 4.0.4.

  • Dentro de la etiqueta “application” añadimos el receptor o cliente de los mensajes. Son 2 intents los que pueden recibirse del GCM: “REGISTRATION” y “RECEIVE”.
    Gracias a que estamos usando la librería de GCM para Android, no tenemos que implementar nuestra propia clase cliente, sino que usamos la que la librería nos proporciona com.google.android.gcm.GCMBroadcastReceiver.

    <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="my_pack" />
      </intent-filter>
    
    </receiver>
    

    Se debe declarar de esta forma, y no mediante programación, para que los mensajes sean recibidos incluso si la aplicación no se está ejecutando.
    El permiso “SEND” se incluye para que tan sólo se reciban intents provenientes de los servidores GCM.

  • Añadimos un servicio cuyo nombre debe ser “GCMIntentService”. Este nombre es al que se llama desde el receptor anterior. Este servicio sí tenemos que implementarlo con nuestras propias acciones.
    <service android:name=".GCMIntentService"/>

Share Button

Leer Más

Google Cloud Messaging. Parte II: Activación del servicio

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 II de un conjunto de entradas sobre Google Cloud Messaging (GCM).


En esta parte vamos a ver cómo activar el servicio de GCM en nuestra cuenta de desarrollador y así poder obtener las claves iniciales que vamos a necesitar:

  • Server ID. Este es el identificador que usa la aplicación Android en el proceso de registro.
  • Sender Auth Token. API key que debe almacenar nuestro servidor para usar los servicios de GCM.

1.  Para poder usar el sistema de GCM hay que crear un nuevo proyecto en la consola de Google APIs. Si no tenemos un proyecto anterior creado nos aparecerá el siguiente cuadro, desde donde pulsamos el botón “Create project…”.

Google API first project

Si ya teníamos un proyecto previo, podemos crear uno nuevo desde el desplegable de la parte izquierda llamado “API Project”. Seleccionamos la opción de “Create…” dentro de “Other projects”

Google APIs create project

El identificador del nuevo proyecto creado es nuestro Sender ID. Este identificador lo consultamos desde el panel “Overview” indicado como “Project Number”.

Google APIs ID

2.  Para activar el servicio GCM, desde el panel de “Services” buscamos “Google Cloud Messaging” y lo activamos. Aceptamos los términos que nos aparecen y listo. Ahora en la pestaña de servicios activos (“Active”) deberá aparecernos el servicio de GCM.

Google APIs active services

3.  Para obtener una API key, desde el panel “API Access” seleccionamos la opción “Create new Browser key…”. Con una clave de este tipo es suficiente. Una clave de servidor (“Server key”) nos permite restringir por la IP de nuestros servidores. Las claves de navegador (“Browser key”) permite restringir por HTTP referer.

Google APIs browser key

Share Button

Leer Más

Google Cloud Messaging. Parte I: Introducción

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

La documentación oficial podemos verla aquí y se encuentra disponible en inglés, por lo que he decidido escribir esta serie de posts en español.

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

Google Cloud Messaging (GCM) para Android es un servicio gratuito que nos permite enviar información desde nuestro servidor a un dispositivo Android. El servicio GCM controla todo lo relacionado con el almacenamiento en cola de los mensajes y su entrega a las aplicaciones.

Características básicas

  • Para que una aplicación reciba mensajes, no es necesario que ésta se encuentre ejecutándose, sino que el sistema la despertará cuando el mensaje llegue.
  • GCM pasa la información recibida directamente a la aplicación, la cual tiene control total sobre ella.
  • Requiere dispositivos con Android 2.2 o superior que tengan instalada la aplicación de Google Play Store o un emulador con Google APIs.
  • Hace uso de una conexión existente a los servicios de Google. Es necesario que los usuarios tengan configurada su cuenta de Google en el dispositivo. Esta cuenta de Google no es un requisito para los dispositivos con Android 4.0.4 o superior.

Componentes que intervienen

Dispositivo móvil
Servidores GCM
Servidor de terceros

Proceso

A continuación se muestran los pasos necesarios para que finalmente un mensaje pueda llegar a un dispositivo móvil Android.

  1. La aplicación se registra en el dispositivo móvil para recibir mensajes. Se realiza lanzando el Intent de registro “com.google.android.c2dm.intent.REGISTER“, que incluye el Sender ID y el Application ID.
  2. Si el registro ha terminado correctamente, el servidor GCM lanza un Intent “com.google.android.c2dm.intent.REGISTRATION” para devolver el Registration ID.
  3. La aplicación envía el Registration ID al servidor de terceros (nuestro servidor) para que sea guardado.
  4. Nuestro servidor ya puede enviar un mensaje para que sea recibido por el dispositivo. El servidor envía el mensaje a los servidores GCM, donde es puesto en cola.
  5. Google envía el mensaje al dispositivo cuando se encuentre accesible.
  6. El dispositivo lanza el mensaje a la aplicación especificada mediante un Intent “com.google.android.c2dm.intent.RECEIVE“, y ésta procesa el mensaje sin necesidad de que estuviera ejecutándose previamente.

Proceso GCM

Credenciales

En el proceso visto anteriormente han aparecido varios identificadores.

  • Sender ID. Se usa en el proceso de registro para identificar una aplicación Android a la cual se le permiten enviar mensajes al dispositivo. Se obtiene desde la página de Google de APIs Console.
  • Application ID. Identificador de la aplicación que se está registrando para recibir mensajes. Se trata del nombre del paquete de la aplicación indicado en el archivo manifest.
  • Registration ID. Identificador enviado por los servidores GCM a la aplicación como respuesta a una solicitud de registro. Este identificador debe ser enviado a nuestro servidor para identificar cada dispositivo que se ha registrado para recibir mensajes. Está asociado a una aplicación concreta existente en un dispositivo concreto.
  • Sender Auth Token. Clave que debe almacenar tu servidor para poder acceder a los servicios de Google.
Share Button

Leer Más