Lo que vamos a ver en
este post es como hacer andar los ejemplos que nos facilita google de GCM para appengine (java) y android.
Empezamos:
Arquitectura
de los ejemplos:
El servicio.
Paso 1:
Este nuevo servicio se encuentra disponible
en la consola de servicios de google, lo primero que tenemos que hacer es
activar dicho servicio en: Google APIs Console page.
Paso 2:
Si no
tienen un proyecto activo, deben crear uno.
Si ya tienes un proyecto, puedes agregar
(en: Dashboard Api Project
->Other projects -> Create) o usar uno existente, cuando
estamos en el proyecto, vemos uno dirección como esta:
https://code.google.com/apis/console/#project:4815162342
El dato que nos interesa es el project
Id: 4815162342
Paso 3:
Activamos
el servicio:
1.
In the main Google
APIs Console page, select Services.
2.
Turn the Google Cloud Messaging toggle
to ON.
3.
In the Terms of
Service page, accept the terms.
Paso 4:
Obtenemos el
Api key :
1. Vamos a API Access
2. Create new
Server key
3. Click Create
Estas key
se pueden cambiar en cualquier momento (tener en cuenta que la vieja key
seguirá activa por 24hs), además luego podemos restringir los ip que pueden
acceder al servicio! (IPs)
Bueno en este punto
ya tenemos el servicio activo y listo para usar!
Vamos con los ejemplos
Servidor
1 – Instalamos los
ejemplo y librerías de ayuda
En el SDK manager de android,
instalamos: Extras > Google
Cloud Messaging for Android Library, esto nos creará unas
carpetas en: YOUR_SDK_ROOT/extras/google/
Tener en cuenta que tenemos que tener el
último sdk de android (_r20 al día de la fecha) porque sino nos nos va a
aparecer el extra GCM
gcm-client, gcm-server, samples.
Lo que nos bajó aquí es: los helper
necesarios para android (client) y java (servlets), ademas de unos ejemplos que
utilizan estos helper en: android, appWeb Java y para una appWeb en appengine
(java), lastima que nada para appEngine python… ese es mi próximo
post!
2 – Descargamos
google appEngine (java) y lo instalamos ver aqui
3 – Editamos la
varible ATTRIBUTE_ACCESS_KEY del archivo: /extras/google/gcm/samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/ApiKeyInitializer.java
1 |
/** |
|
2 |
* Context initializer
that loads the API key from the App Engine datastore. |
3 |
*/ |
|
4 |
public class ApiKeyInitializer
implements ServletContextListener { |
5 |
|
|
6 |
static final String ATTRIBUTE_ACCESS_KEY = "API key"; //nuestra key api
que generamos en la consola de api services de google |
En este
punto y aunque no este en la doc oficial, yo agregué el API Key en:
entity.setProperty(ACCESS_KEY_FIELD, ATTRIBUTE_ACCESS_KEY);
del mismo
archivo: /extras/google/gcm/samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/ApiKeyInitializer.java
4 – nos vamos al
directorio: cd /extras/google/gcm/samples/gcm-demo-appengine
Tenemos
que armar el paquete de nuevo con el cambio:
01 |
$ ant war |
|
02 |
|
03 |
Buildfile:build.xml |
|
04 |
|
05 |
init: |
|
06 |
[mkdir]
Created dir: build/classes |
07 |
[mkdir] Created dir: dist |
|
08 |
|
09 |
compile: |
|
10 |
[javac]
Compiling 6 source files to build/classes |
11 |
|
|
12 |
war: |
13 |
[war]
Building war: <strong>dist/gcm-demo.war</strong> |
|
14 |
|
15 |
BUILD SUCCESSFUL |
|
16 |
Total time: 0 seconds |
5 – Ejecutamos el
servidor de desarrollo de appengine con el comando ant y le indicamos donde
esta el sdk appengine y cual es el ip host
si no tenemos ant, tienen que instalarlo, en
linux el comando es:
$ sudo apt-get install ant
01 |
$ ant
-Dsdk.dir=/opt/google/appengine-java-sdk runserver -Dserver.host=192.168.1.10
Buildfile: gcm-demo-appengine/build.xml |
|
02 |
init: |
03 |
[mkdir]
Created dir: gcm-demo-appengine/dist |
|
04 |
|
05 |
copyjars: |
|
06 |
|
07 |
compile: |
|
08 |
|
09 |
datanucleusenhance: |
|
10 |
[enhance]
DataNucleus Enhancer (version 1.1.4) : Enhancement of classes |
26 |
6 – ver en un
browser: http://192.168.1.10:8080/
Perfecto! ahora vamos con
android…
En la
documentación original, compila, instala y prueba desde la consola, nosotros lo
vamos a hacer en eclipse para poder hacer debug, ver variables etc..
1 – Abrimos eclipse (supongamos que
ya lo tienen configurado con el sdk y emulador), sino lo pueden hacer por
consola como en la doc original,
y ponemos:
file > new
> project… > android > Android Project from existing code
Root
Directory: AndroidSdk/extras/google/gcm/samples/gcm-demo-client
Seleccionamos el proyecto y finish
Ya tenemos
el proyecto en eclipse, al cual podemos hacer click derecho > properties
> android y le ponemos el target que necesitemos
recordar que esto funciona
a partir de android 2.2 api 8 en adelante, y que si utilizamos
una versión de android inferior a Android 4.04, tiene que tener si o
si al menos una cuenta google asociada!
2 – Editamos el
archivo: CommonUtilities.java
01 |
public final class CommonUtilities { |
|
02 |
|
03 |
/** |
|
04 |
05 |
*/ |
|
06 |
static final String SERVER_URL = "http://192.168.1.10:8080";
//local IP donde esta corriendo el servidor de desarrollo del appengine |
07 |
|
|
08 |
/** |
09 |
* Google API project
id registered to use GCM. |
|
10 |
*/ |
11 |
static final String SENDER_ID = "4815162342";
//el ID del proyecto que vimos al principio |
3 – En eclipse: run > Debug
as > Android Aplication (tener ya configurado el emulador con android 2.2 o
superior)
Deberíamos ver un texto simple con el mensaje del Cliente registrado en nuestro servidor de ejemplo.
Deberíamos ver un texto simple con el mensaje del Cliente registrado en nuestro servidor de ejemplo.
4 – Refresh en el
browser, para ver que un cliente se ha registrado.
5 – Presionamos en
Send Message, para enviarle a un cliente ya registrado un simple mensaje. Validen esto en su emulador.
Ya tenemos todo
listo, el device registrado en el server y el device listo para recibir
mensajes!! Espero les
sirva!!
No hay comentarios:
Publicar un comentario