Está en la página 1de 8

Google Cloud Messaging for Android

Google Cloud Messaging for Android (GCM) es una servicio que ayuda a los desarrolladores a enviar datos desde servidores a aplicaciones en dispositivos Android. Esto podra ser un mensaje diciendo a la aplicacin Android que hay nuevos datos que recoger del servidor (por ejemplo, una pelcula cargada por un amigo), o podra ser un mensaje que contiene hasta 4kb de datos carga til (as las aplicaciones de mensajera instantneas por ejemplo podran obtener el mensaje directamente). El servicio GCM maneja todos los aspectos de cola de mensajes y entrega a la aplicacin Android de destino. GCM es completamente gratis y no importa cuan grande son tus necesidades de mensajera, y no hay cuotas. Google introdujo en Android, a partir de la versin 2.2 (Froyo), la posibilidad de implementar notificaciones de tipo push, lo que significa que es el servidor el que inicia el proceso de notificacin, pudiendo realizarla en el mismo momento que se produce el evento, y el cliente se limita a esperar los mensaje sin tener que estar peridicamente consultando al servidor para ver si existen novedades, y sin tener que mantener una conexin permanentemente abierta con ste. En la arquitectura de Google, todo esto se consigue introduciendo un nuevo actor en el proceso, un servidor de mensajera push o cloud to device (que se traducira en algo as como mensajes de la nube al dispositivo), que se situara entre la aplicacin web y la aplicacin mvil. Este servidor intermedio se encargar de recibir las notificaciones enviadas desde las aplicaciones web y hacerlas llegar a las aplicaciones mviles instaladas en los dispositivos correspondientes. Para ello, deber conocer la existencia de ambas aplicaciones, lo que se consigue mediante un protocolo bien definido de registros y autorizaciones entre los distintos actores que participan en el proceso. Este servicio de Google recibi en sus comienzos las siglas C2DM (Cloud to Device Messaging), pero recientemente y coincidiendo con su salida de fase beta ha modificado su nombre a GCM (Google Cloud Messaging). Lo primero que hace es darnos de alta en el servicio, que a pesar de ser gratuito requiere de un proceso previo de registro y la generacin de una ApiKey.

GCM: Introduccin
Creacin de un proyecto con el API de Google 1- Abrir el Google APIs Console page. 2- Si todava no has creado un proyecto, esta pgina le pedir que lo haga:

Nota: Si ya has creado un proyecto, la primera pgina que veras ser el Dashboard. Desde ah podrs crear un nuevo proyecto abriendo el Menu de Proyectos haciendo un Drop-down y eligiendo Other projects>Create. 3- Clic en crear proyecto. La URL de tu navegador cambiar a algo similar a esto:
https://code.google.com/apis/console/#project:4815162342 4- Tomar nota del valor despus de #project: (en este ejemplo

4815162342). Este es tu project ID, y este ID ser usado luego como el ID del GCM sender.

Habilitando el servicio GCM


Para habilitar el servicio GCM seguir los siguientes pasos: 1- En la pgina de la consola de Google Api, seleccionar Services 2- Cambiar Google Cloud Messaging a ON 3- Aceptar los terminos de Servicio

Obteniendo el API Key


1- En la pgina de la consola del API de Google, seleccionar el API Access. Veras una pantalla parecida a la siguiente:

2- Click en Create new Server Key. Ya sea una clave de servido (server Key) o una llave navegador (browser key) debera funcionar. La ventaja de usar un server key es que te permite tener una lista blanca o whitelist de direcciones IP.

3- Click en Create

Con esto ya nos habramos registrado correctamente en el servicio GCM y habramos generado nuestra API Key para identificarnos, con lo que estaramos en disposicin de construir nuestras aplicaciones cliente y servidor.

Para asegurar la correcta comunicacin entre los tres sistemas se hace necesario un protocolo de registros y autorizaciones que proporcione seguridad y calidad a todo el proceso. Este proceso se resume en el siguiente grfico:

Fuente Grafico: www.sgoliver.net Explicacin aAutenticacin de nuestra aplicacin web en el servicio GCM. En la anterior versin del servicio GCM (llamada C2DM) esto deba hacerse mediante la utilizacin de otra API de Google llamada ClientLogin, o a travs del protocolo OAuth 2.0, ambas dirigidas a obtener un token de autorizacin que deba enviarse posteriormente en el resto de llamadas al servicio. Sin embargo, con la llegada de Google Cloud Messaging, esto se ha simplificado mediante la obtencin y uso de una API Key. Como pasaba con el token de autorizacin, nuestra nueva API Key deber acompaar a cada una de las llamadas que hagamos al servicio GCM desde nuestra aplicacin web.

Los siguientes pasado, ya s mostrados en el diagrama, seran los siguientes:

1- El siguiente paso es el equivalente al ya comentado para el servidor pero esta vez desde el punto de vista de la aplicacin cliente. La aplicacin Android debe registrarse en los servidores GCM como cliente capaz de recibir mensajes desde dicho servicio. Para esto es necesario que el dispositivo/emulador cumplan una serie de requisitos: a. Disponer de Android 2.2 o superior. b. Tener configurada una cuenta de Google en el dispositivo o emulador. Configurable desde Ajustes / Cuentas y sincronizacin.

c. Si se trata de un dispositivo real debe estar instalada la Google Play Store. Por el contrario si estamos ejecutando la aplicacin desde el emulador bastar con usar un target que incluya las APIs de Google.
2- Si el registro se finaliza correctamente se recibir un cdigo de registro (Registration ID) que la aplicacin cliente deber conservar. Adems, la aplicacin Android deber estar preparada para recibir peridicamente refrescos de este cdigo de registro, ya que es posible que el servidor GCM invalide peridicamente este ID, genere uno nuevo y lo vuelva a notificar a la aplicacin cliente. 3- Este nuevo paso consiste en enviar, desde la aplicacin cliente a la aplicacin servidor, el cdigo de registro GCM recibido, el cual har las veces de identificador nico del cliente en el servidor de forma que ste pueda indicar ms tarde el dispositivo mvil concreto al que desea enviar un mensaje. La aplicacin servidora tendr que ser capaz por tanto de almacenar y mantener todos los ID de registro de los distintos dispositivos mviles que se registren como clientes capaces de recibir mensajes. 4- El ltimo paso ser obviamente el envo en s de un mensaje desde el servidor hasta un cliente determinado, algo que se har a travs del servidor GCM (paso 4.1) y desde ste se dirigir al cliente concreto que debe recibirlo (paso 4.2).

Instalar las libreras del Helper


Desde el SDK Manager, ir a Extras > Google Cloud Messaging for Android Library. Esto crear un directorio gcm en la direccin YOUR_SDK_ROOT/extras/google/ conteniendo estos subdirectorios: gcm-client, gcm-server, samples/gcm-demo-client samples/gcm-demo-server samples/gcm-demo-appengine.

Escribiendo una Aplicacin Android


Paso 1: Copiar el archivo gcm.jar dentro del classpath de la aplicacin Para escribir en tu Aplicacin Android, primero debes copiar el archivo gcm.jar desde el directorio del SDK/gcm-client/dist al classpath de tu aplicacin Paso 2: Realizar los siguientes cambios en el manifest de la aplicacin Android 1- GCM requiere una versin de Android 2.2 o mayor, as que si tu aplicacin no puede funcionar sin GCM, agregar la siguiente lnea, donde xx es la versin ms reciente del SDK

2- Declarar y usar un permiso personalizado para que solo esta aplicacin pueda recibir los mensajes GCM
<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name=" my_app_package.permission.C2D_MESSAGE" />

Este permiso debe ser llamado my_app_package.permission.C2D_MESSAGE (donde my_app_package es el nombre del paquete de tu aplicacin segn la definicin en el tag del manifest), de otra manera no funcionara. 3- Aadir los siguientes permisos

4- Aadir el siguiente Broadcast Receiver:

Este broadcast receiver es responsable de manejar 2 eventos que pueden ser enviados por el GCM (com.google.android.c2dm.intent.RECEIVE y com.google.android.c2dm.intent.REGISTRATION) y deberan ser definidos en el manifest (antes que programticamente) as estos eventos pueden ser recibidos incluso si la aplicacin no esta corriendo. Seteando el permiso com.google.android.c2dm.permission.SEND te aseguras que solo el evento enviado por el sistema GCM es enviado al receptor. Una aplicacin regular no puede emitir eventos con estos permisos. Nota: Qu es un Broadcast Receiver? Un Broadcast Receiver es una especie de receptor de los eventos que produce el sistema operativo Android. Tpicamente, un Broadcast Receiver se utiliza para mostrar notificaciones de los eventos que ocurren en nuestro telfono mvil, como por ejemplo el descubrimiento de una red wifi o el agotamiento de la batera.

5- Agregar el evento service

Este evento service ser llamado por el GCMBroadcastReceiver (La cual es proveida por la libreara GCM). Debera ser una subclase de com.google.android.gcm.GCMBaseIntentService, debera contener un contructor pblico, y debe ser nombrado my_app_package.GCMIntentService (a menos que se use una subclase de GCMBroadcastReceiver que remplaza el mtodo utilizado para nombrar el servicio). El evento service tambin debe definir el ID de su remitente(s). Esto se hace como sigue: Si el valor es esttico, el constructor por defecto del servicio debera llamar a super(senderIds). Si el valor es dinmico, el servicio debera anular el metodo getSenderIds ().

Paso 3: Escribir la clase my_app_package.GCMIntentService A continuacin escribir la clase my_app_package.GCMIntentService, remplazando los mtodos siguientes (que son llamados por GCMBroadcastReceiver): onRegistered (Context context, String regId): Se llama despus de que un evento de registro es recibido, se pasa el ID de registro asignado por el GCM al par dispositivo / aplicacin como parmetro. Por lo general, se debe enviar el redId al servidor para que pueda usarlo para enviar mensajes a este dispositivo. onUnregistered (Context context, String regId): Se llama despus de que el dispositivo ha sido des registrado desde el GCM. Por lo general, se debe enviar el regIid al servidor entonces se des registra del dispositivo.

onMessage (Context context, Intent intent): Se le llama cuando el servidor enva un mensaje al GCM, y el GCM lo entrega al dispositivo. Si el mensaje tiene una carga, sus contenidos estn disponibles como extras en el intent. onError (contexto Contexto, String errorId): Se llama cuando el dispositivo intenta registrarse o desregistrarse, pero el GCM ha devuelto un error. Por lo general, no hay nada que hacer que no sea evaluar el error (devuelto por errorId) y tratar de arreglar el problema.

onRecoverableError (Context context, String errorId): Se llama cuando el dispositivo intenta registrarse o desregistrarse, pero los servidores GCM no estn disponibles. La libreara GCM volver a intentar la operacin utilizando un backup exponencial, a menos que este mtodo se remplace y retorne falso. Este mtodo es opcional y debe ser anulada slo si se desea mostrar el mensaje al usuario o cancelar los reintentos.

Escribir el main activity


Agregar el siguiente import en el main activity
import com.google.android.gcm.GCMRegistrar;

En el mtodo onCreate(), aadir el siguiente cdigo:

El metodo checkDevice() verifica que el dispositivo soporta GCM y lanza una excepcin si no (por ejemplo, si es un emulador que no contiene el API de Google). Similarmente, el mtodo checkManifest() verifica que el manifest de la aplicacin cumpla con todos los requerimientos descriptos en Writing the Android Application (este mtodo es solo necesario cuando se esta desarrollando la aplicacin; una vez que la aplicacin esta lista para ser publicada se puede removerla). Una vez que los controles de correccin se realizan, el dispositivo llama a GCMRegsistrar.register() para registrar el dispositivo, pasando el SENDER_ID que se consigui cuando te inscribiste al GCM. Pero dado que el singleton GCMRegistrar comprueba el ID de registro en el momento de la llegada del evento de registro, se puede llamar a GCMRegistrar.getRegistrationId() primero para chequear si el dispositivo ya esta registrado.

Fuentes: http://developer.android.com http://www.sgoliver.net

También podría gustarte