lunes, 22 de abril de 2013

Android: Jugando con las notificaciones push de Google Cloud Messaging




Todo el mundo conoce las notificaciones Push como el típico mensajito que nos sale en la pantalla del teléfono cuando recibimos un mensaje de Whatsapp o un correo electrónico. Este tipo de notificaciones, desde el punto de vista de Android, se montan con el servicio de Google Cloud Messaging. En el día de hoy solo vamos a ver como montar el ejemplo que la librería nos trae por defecto, y en futuras ediciones realizaremos nuestra propia aplicación desde cero.

Descarga de las librerías

Para poder trabajar con Google Cloud Messaging (en adelante CGM) tendremos que descargarnos las librerías haciendo uso de la herramienta SDK Manager. Para abrirlo, en nuestro Eclipse accederemos al menú Windows > Android SDK Manager.


Una vez abierto, nos moveremos hacia abajo y en Extras localizaremos Google Cloud Messaging for Android Library. Lo seleccionaremos y lo instalaremos.



Una vez instalado, con el explorador iremos al directorio de nuestro SDK > extras  > google > gcm y ahí tendremos localizadas tanto las librerías como los ejemplos. Si accedemos a los ejemplos podremos ver 3 directorios, de los cuales a nosotros nos interesan dos:
  • gcm-demo-client: aplicación Android para nuestro dispositivo que será el cliente.
  • gcm-demo-server: aplicación web para nuestro servidor Java (Apache Tomcat) que hará de servidor.


Montando el ejemplo de servidor

Para instalar el servidor, copiaremos el directorio gcm-demo-server dentro del workspace de NetBeans 7.x (por ejemplo, en mi caso: C:\Users\jose.c.arcenegui\workspace). Una vez copiado el directorio, desde NetBeans crearemos un  nuevo Proyecto Java Web > Web Application with Existing Sources.


Seleccionaremos nuestro directorio copiado, y el resto de opciones por defecto.


Seguramente nos indique que hay un archivo build.xml y que debemos indicar un nuevo nombre: seleccionamos el que nos indique por defecto.


Y por supuesto, cuando nos pregunte por nuestro servidor web donde desplegaremos, le diremos que Apache Tomcat.


Y listo, ya tenemos nuestro proyecto web importado que podremos desplegar.


Una vez publicado en Apache Tomcat podremos ver como nuestra nueva aplicación web.






Preparando el cliente

Con nuestro servidor ya montado, toca jugar con nuestro teléfono/tablet. En Eclipse, navegamos al menú File > Import…


Y seleccionamos Existing Android Code Into Workspace


Indicamos la ruta de nuestro ejemplo gcm-demo-client (directorio del sdk\extras\google\gcm\samples\gcm-demo-client) y marcamos el proyecto DemoActivity y  la opción copy projects into workspace.


Y al finalizar tendremos el proyecto listo para desplegar en nuestro dispositivo, aunque antes deberemos realizar una serie de cambios.

Creación del proyecto GCM

Antes de seguir, deberemos crearnos un proyecto de GCM desde la web https://code.google.com/apis/console

Al crearlo, nos devolverá un identificador del proyecto


Tras esto, deberemos ir a Services y marcar la opción Google Cloud Messaging for Android.



Y en API Access deberemos crear un API Server Key



Cambios en el proyecto Android

Deberemos realizar una serie de cambios en nuestro proyecto Android antes de desplegar en la clase CommonUtilities.


Indicaremos la URL del servidor en SERVER_URL y el Project Number en SENDER_ID


MUY IMPORTANTE: Recuerda indicar la IP y no pongas localhost!!!

Si ahora ejecutamos la aplicación en nuestro dispositivo veremos que es capaz de registrarse en GCM pero no en nuestro servidor.



Pasa que esto funciona deberemos aplicar una serie de cambios en nuestra aplicación web.

Cambios en el servidor

Editaremos el archivo WEB-INF/api.key y copiaremos nuestra API Key que generamos desde la web.


Una vez realizado este cambio, podremos volver a desplegar y probar, registrando nuestro dispositivo.


Y en la web nos saldrá que tenemos un dispositivo registrado y que podemos probar a enviar mensajes.



En el siguiente post haremos nuestra propia aplicación con notificaciones Push.