Análisis de la batería del Apple Watch

Uno de los factores clave para la adopción de los dispositivos conocidos como “wearables”, es la duración de su batería.

Usamos portátiles, smartphones y tablets que necesitamos cargar casi a diario. Tener un wearable, como un smartwatch, lleva consigo un dispositivo más a cargar. Si tu smartphone está casi sin batería, puedes buscar un lugar donde cargarlo mientras tanto. Con un smartwatch necesitamos quitarlo de nuestra muñeca. No podemos mirar la hora mientras se está cargando, al menos no mirando nuestra muñeca directamente.

La duración de la batería es una característica importante que debemos tener en cuenta cuando elegimos un smartwatch, por eso he medido cómo se consume la batería del Apple Watch. En esta entrada quiero mostrar los resultados.

Estas son las especificaciones del Apple Watch que he usado para los tests:

Apple Watch Sport
Alto: 42.0mm
Ancho: 35.9mm
Grosor: 10.5mm
Caja: 30g
Color blanco.

Consumo de batería

El análisis del consumo de la batería del Apple Watch corresponde a un uso básico del reloj.

Esto quiere decir que las acciones con el reloj fueron mirar la hora de vez en cuando y leer algunas notificaciones. No pasé tiempo explorando las aplicaciones, ni miré mapas ni registré actividad física.
Como resultado, la duración de la batería del Apple Watch es de aproximadamente unas 50 horas: algo más de 2 días.
Por tanto, si realizas más acciones con el reloj que las de mirar la hora o leer notificaciones, la batería durará menos de 2 días, por lo que necesitarás cargarlo todos los días.

La siguiente gráfica muestra el gasto de batería a lo largo de la horas.

Nivel de batería

Ahorro de batería

Cuando el nivel de batería del Apple Watch es muy bajo, en torno al 10%, el modo de ahorro de batería se activa automáticamente. También puedes activar este modo en cualquier momento desde la pantalla de Batería o desde el menu de apagado del reloj.
En el modo de ahorro de batería solamente puedes ver la hora junto a un icono rojo de batería. El reloj ya no reacciona cuando tocas la pantalla por lo que necesitas pulsar el botón físico lateral para ver la hora.

Low power
Apple Watch no battery

Cuando el Apple Watch está en ahorro de batería, el consumo es mucho menor. Esto puede observarse en la siguiente gráfica, donde el modo de ahorro de batería estuvo activado durante varias horas.

Nivel de batería con ahorro de energía

Otros resultados

Apple Watch charging
Tiempo de carga 
El Apple Watch tarda aproximadamente unos 120 minutos en cargarse por completo. Son unas 2 horas.

Tiempo de arranque 
El Apple Watch tarda aproximadamente 1 minuto y 10 segundos en encenderse.

Leer Más

Primer análisis del Apple Watch

En este post quiero mostrar las primeras impresiones del Apple Watch. Este post incluye: enlazar el reloj con tu iPhone, el cargador y qué ocurre cuando el reloj no puede conectar con el iPhone enlazado.

Mi experiencia es que Apple Watch is dispositivo curioso de llevar, pero al final he terminado usando el teléfono para todo y el reloj sólo para mirar la hora. El Apple Watch no es realmente bueno para mirar la hora, ya que la pantalla se enciente automáticamente cuando realizas el movimiento de girar la muñeca. Hay veces en las que nos haces ese movimiento o que el reloj no lo detecta correctamente. En estos casos, tienes que tocar la pantalla del reloj con tu dedo. A pesar de esto, la detección del movimiento de tu muñeca funciona realmente bien.

Estas son las especificaciones del Apple Watch que he usado para este post:

Apple Watch Sport
Alto: 42.0mm
Ancho: 35.9mm
Grosor: 10.5mm
Caja: 30g
Color blanco.

La siguiente imagen muestra la caja que contiene el Apple Watch. Se incluyen dos correas de tamaños diferentes, una más grande que la otra.

Apple Watch in box

 

Enlazando el Apple Watch

Necesitarás el Apple Watch (obvio) y la app de Apple Watch para iPhone.
La app de Apple Watch para iPhone está disponible desde la versión 8.2. Primero asegúrate de tener actualizado tu dispositivo con la versión de iOS 8.2 o posterior. Deberías ver la siguiente app de Apple Watch en tu móvil.

Apple Watch app icon

Una vez enciendas el Apple Watch, te pedirá que lo configures y lo enlaces con tu iPhone.
Abre la app del Apple Watch desde tu iPhone y sigue los pasos del asistente. Finalmente pulsa desde tu reloj el botón para comenzar a enlazar.

Apple Watch start pairing

Tanto el reloj como el iPhone muestran una pantalla indicando el proceso de sincronización.

Apple Watch pairing

Una vez ha terminado la sincronización, ¡ya está todo listo!

Apple Watch ready
Apple Watch apps

 

Cargando el Apple Watch

El cargador es un cargador magnético. Sólo necesitas situar tu reloj sobre él.
Apple Watch charger

Cuando el nivel de batería del Apple Watch es muy bajo, en torno al 10%, el modo de ahorro de batería se activa automáticamente. También puedes activar este modo en cualquier momento desde la pantalla de Batería or desde el menu de apagado del reloj.
En el modo de ahorro de batería, sólo puedes ver la hora junto a un icono rojo de batería. El reloj ya no reacciona cuando tocas la pantalla por lo que necesitas pulsar el botón físico lateral para ver la hora.
La siguiente imagen de la izquierda muestra el reloj con nivel de batería bajo. La imagen derecha muestra el reloj mientras está cargando.

Apple Watch no battery
Apple Watch charging

 

Desconectado de tu iPhone

El Apple Watch necesita tu iPhone para que la mayoría de sus características funcionen. Si el reloj no se puede comunicar con el iPhone enlazado, se muestra un icono rojo en la parte superior de la pantalla, tal y como muestra la siguiente imagen.

Apple Watch out of range

Cuando el teléfono está fuera de alcance, algunas aplicaciones no funcionarán en el reloj.
Como se ve en la siguiente imagen de la izquierda, un mensaje en rojo advierte al usuario que la información que se muestra fue actualizada hace varios días. El icono rojo que indica que el iPhone no está dentro del rango del reloj, se muestra en la parte superior derecha de la pantalla. La imagen derecha muestra una aplicación sin ninguna información.

Apple Watch weather
Apple Watch stock

 

Este post ha explicado los primeros pasos para poder usar tu Apple Watch. Si quieres aprender más, comprueba mis siguientes posts y aquí dejo el link al Manual del usuario del Apple Watch..

Leer Más

Google Cloud Messaging. Parte VI: Respuesta al envío de mensajes

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


Cuando desde nuestro servidor enviamos una solicitud de envío de mensaje al sistema de GCM, éste nos envía un mensaje de respuesta. Es muy importante que leamos e interpretemos este mensaje y no asumir que nuestro mensaje fue enviado correctamente.

Encontramos dos niveles de errores: un primer nivel donde el error se produce en el envío de nuestra solicitud a los servidores GCM, y un segundo nivel donde el error se produce en el propio contenido de la solicitud. La siguiente figura representa de forma esquemática cómo puede ser una respuesta del sistema de GCM. Se toma como base que la solicitud se construye en formato JSON, y por tanto, la respuesta también se recibe en este formato. Existe la posibilidad de que este mismo proceso se realice en texto plano.
Message response

Código HTTP

El código del estado de la respuesta HTTP puede tener los siguientes valores:

  • 200
    La solicitud ha sido recibida correctamente. En este caso debemos examinar el cuerpo de la respuesta tal y como vemos en la figura anterior.
  • 400
    La solicitud no pudo ser interpretada como JSON, o la estructura del JSON era incorrecta. En el contenido de la respuesta se incluye la descripción detallada del error ocurrido.
  • 401
    Error autenticando a nuestro servidor. Revisa que la API Key sea la correcta.
  • 5xx
    Error interno del sistema de GCM. No tenemos que hacer nada en este caso, tendremos que intentarlo más tarde.

Contenido JSON

Si la solicitud fue correcta y obtenemos el código 200, el contenido vendrá estructurado en formato JSON con los siguientes campos:

  • multicast_id.
    Identificador único de la solicitud.
  • success.
    Número de mensajes procesados correctamente. Hay que recordar que en una solicitud podemos indicar una lista de receptores.
  • failure.
    Número de mensajes con error.
  • canonical_ids.
    Número de resultados que incluyen identificadores canónicos. Un identificador canónico es el identificador de registro que debemos usar para un dispositivo concreto. Esto quiere decir que el identificador de registro que tenemos almacenado en nuestro servidor es incorrecto por existir otro más reciente. Puede producirse esta situación si por mal funcionamiento de nuestra aplicación cliente, se solicitan dos registros del mismo dispositivo al sistema de GCM.
  • results.
    Listado del estado concreto de cada uno de los mensajes (cada uno de los identificadores de registro enviados en la solicitud) con los siguientes posibles campos:

    • message_id.
      Si existe este campo, es porque el mensaje es correcto. Representa su identificador.
    • registration_id.
      Si existe este campo, quiere decir que este mensaje es uno de los que se han contado para el campo “canonical_ids”. Contiene el identificador de registro válido.
    • error.
      Tipo de error.

Tipos de error

Estos son los tipos de errores que pueden producirse para un receptor concreto:

  • NotRegistered.
    El identificador ya no está registrado en GCM. Debe ser borrado de tu servidor.
  • MessageTooBig.
    El tamaño del mensaje no puede exceder los 4096 bytes.
  • MismatchSenderId.
    El grupo de emisores de los mensajes que puede recibir el identificador de registro no coincide con tu servidor.
  • MissingRegistration.
    No se encontraron identificadores de registro a quienes enviar el mensaje.
  • InternalServerError.
    Error en GCM, por lo que podemos intentar enviar la solicitud de nuevo. Puede producirse también como código HTTP 500.
  • InvalidDataKey.
    Los datos del mensaje contienen una clave que no puede ser usada debido a que es una clave que se usa internamente por GCM. Tendrás que cambiar el nombre de tu clave.
  • InvalidPackageName.
    El nombre del paquete asociado el identificador de registro no se corresponde con el de nuestra API key.
  • InvalidRegistration.
    El identificador de registro es incorrecto. Comprueba que se están enviando, guardando y recuperando correctamente.
  • InvalidTtl.
    El campo del tiempo de vida del mensaje no es válido. Recuerda que debe ser un entero entre 0 y 2.419.200 que representa segundos, el máximo son 4 semanas.
  • Unavailable.
    El servidor GCM tardó mucho tiempo en procesar la solicitud, por lo que podemos intentar enviar la solicitud de nuevo. Puede producirse también como código HTTP 500.

 

Leer Más

Google Cloud Messaging. Parte V: Envío de mensajes

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


En esta parte vamos a ver el funcionamiento de la parte del servidor. Partimos de la base de que conocemos el Registration ID de los dispositivos a los que vamos a enviar notificaciones. El comportamiento estándar sería aquel en el cual nuestra aplicación cliente manda una petición a nuestro servidor cuando recibe su Registration ID y el servidor lo almacena en una base de datos para recuperarlo posteriormente.

Para enviar una notificación tendremos que enviar una petición POST a la siguiente dirección:

https://android.googleapis.com/gcm/send

El contenido de la petición debe ir en formato JSON (como alternativa también se puede usar texto plano). En la cabecera debemos especificar que el tipo de contenido es JSON: “Content-Type: application/json” e indicar nuestra API Key: “Authorization: key=YOUR_API_KEY”.

Formato del contenido JSON

El contenido JSON puede contener los siguientes campos:

  • registration_ids.
    Es el único campo obligatorio. Es un array de cadenas (o strings) que representan los registration IDs de los dispositivos que van a recibir la notificación. Mínimo debe contener un valor.
  • collapse_key.
    Cadena de texto que se usa para unificar varios mensajes en una sola notificación. Este mecanismo se usa cuando un dispositivo pasa de estar desconectado a conectado, y recibe demasiados mensajes de golpe. Para evitar este molesto resultado, tan sólo le llegaría la última notificación junto con el texto especificado en este campo.
  • data.
    Objeto JSON que representa los pares de clave-valor de la información del mensaje. Estos pares clave-valor serán pasados en el Intent que se reciba en la aplicación. Se recomienda el uso de cadenas de texto para los valores, ya que de todas formas serán convertidos a este tipo. La única limitación es que el tamaño total del mensaje no exceda los 4kb.
  • delay_while_idle.
    Valor booleano (por defecto es falso) que indica si la entega del mensaje debe retrasarse hasta que el dispositivo esté activo.
  • time_to_live.
    Valor numérico que indica cuántos segundos debe mantenerse el mensaje en los servidores de GCM si el dispositivo no está activo. El valor por defecto son 4 semanas.
  • restricted_package_name.
    Cadena de texto que contiene el nombre del paquete de nuestra aplicación. Si se especifica este valor, sólo se enviarán los mensajes a los registration IDs que concuerden con el paquete.
  • dry_run.
    Valor booleano (por defecto es falso) que indica si el mensaje es de prueba, es decir, el mensaje no va a ser enviado realmente a los dispositivos.

Un ejemplo sencillo de un mensaje sería este:

{ "data": {
    "mensaje": "Nueva oferta",
    "id": "16044"
  },
  "registration_ids": ["1", "2", "3"]
}

Envío en PHP

El envío de mensajes puede realizarse desde cualquier tecnología que nos permita realizar una petición de tipo POST.
A continuación se muestra el código para enviar el mensaje del ejemplo anterior en lenguaje PHP.

$apiKey = 'xxxxxxxxx_xx_xxxxxxx';

// Cabecera
$headers = array('Content-Type:application/json',
                 "Authorization:key=$apiKey");

// Datos
$payload = array('mensaje' => utf8_encode('Nueva oferta'),
                 'id' => '16044');
$registrationIdsArray = array('1', '2', '3');

$data = array(
   'data' => $payload,
   'registration_ids' => $registrationIdsArray
);

// Petición
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data));

// Conectamos y recuperamos la respuesta
$response = curl_exec($ch);

// Cerramos conexión
curl_close($ch);

Leer Más

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


En la publicación anterior comenzamos a ver la aplicación Android cliente: la instalación de la librería GCM y la configuración del fichero AndroidManifest.xml. En esta parte vamos a terminar de mostrar la aplicación cliente viendo la parte de programación.
Necesitamos implementar básicamente tres acciones:

  • Registro del servicio GCM
  • Borrado del registro del servicio
  • Recepción de los mensajes

Registro y borrado del servicio

Lo más normal es que queramos que nuestra aplicación se registre al comienzo de su ejecución, sin que sea necesaria interacción por parte del usuario. Por este motivo, el código necesario para el registro de la aplicación a GCM lo insertaremos en el método onCreate de nuestra Activity principal. Según los requerimientos de cada aplicación, puede realizarse el registro de forma diferente.

import com.google.android.gcm.GCMRegistrar;
...

try{

   GCMRegistrar.checkDevice(this);
   GCMRegistrar.checkManifest(this);

   final String regId = GCMRegistrar.getRegistrationId(this);

   if (regId.equals("")) {
      GCMRegistrar.register(this, SENDER_ID);
   } else {
      Log.v(TAG, "Ya estoy registrado");
   }

} catch (UnsupportedOperationException e) {
   Log.e(TAG, "El dispositivo no soporta GCM.", e);
} catch (IllegalStateException e) {
   Log.e(TAG, "El manifest no está bien configurado.", e);
}

En la línea 6 comprobamos si el dispositivo soporta GCM, de lo contrario saltará una excepción que debemos capturar.
En la línea 7 se comprueba si el archivo AndroidManifest.xml está bien configurado, por lo que una vez sepamos que está correcto, podemos quitar esta llamada. Igualmente debemos tratar la posible excepción que nos saltará si la configuración está mal.
En la línea 9 buscamos el Registration ID. En el caso de que no exista, es porque aún no nos hemos registrado.
El registro se realiza en la línea 12 donde pasamos como parámetro nuestro Sender ID.

Si recordamos el proceso del servicio de GCM, en el registro debíamos indicar el Sender ID y el Application ID. El Sender ID está contenido en la constante SENDER_ID y el Application ID es tomado automáticamente por la librería de GCM. El Sender ID se obtiene desde la consola de Google APIs tal y como expliqué en la parte II.


Para borrar el registro, llamamos al método unregister.

GCMRegistrar.unregister(this);

Podemos crear una vista de configuración donde el usuario pueda desactivar las notificaciones.

Servicio receptor

Finalmente tenemos que implementar la lógica de nuestro cliente cuando le lleguen los eventos. Con el uso de la librería GCM para Android tan sólo tenemos que crear el servicio que declaramos en el manifest llamado GCMIntentService. Esta clase tiene que extender la clase base que nos proporciona la librería GCM, GCMBaseIntentService. Al extenderla podemos añadir automáticamente los métodos a implementar.

import com.google.android.gcm.GCMBaseIntentService;

public class GCMIntentService extends GCMBaseIntentService {

   @Override
   protected void onError(Context context, String errorId){
      // Error en el registro: tratamiento del error
   }

   @Override
   protected void onMessage(Context context, Intent intent){
      // Notificación recibida: informo al usuario u otra acción	
   }

   @Override
   protected void onRegistered(Context context, String regId){
      // Registro correcto: envío el regId a mi servidor	
   }

   @Override
   protected void onUnregistered(Context context, String regId){
      // Borrado correcto: informo a mi servidor
   }
}

Es tan sencillo como añadir la lógica de nuestra aplicación a estos cuatro métodos:

  • onError.
    Este método es llamado cuando intentamos registrarnos o borrarnos del servicio de GCM pero se recibe un error.
  • onMessage.
    Este método es llamado cuando los servidores de GCM envíen un mensaje al dispositivo (previo envío del mensaje de nuestro servidor a los servidores de GCM). Si el mensaje contiene datos, éstos están contenidos como extras en el intent:

    String mensaje = intent.getStringExtra("mensaje");
    
  • onRegistered.
    Este método es llamado cuando tras una solicitud de registro, se recibe el Registration ID asignado por GCM. Recordamos que este identificador debe ser enviado y almacenado en nuestro servidor.
  • onUnregistered.
    Este método es llamado cuando el dispositivo se da de baja del servicio de GCM. Debe informarse a nuestro servidor para que también lo elimine.

Los errores que pueden recibirse en el método onError se encuentran como constantes en la clase GCMConstants de la librería GCM:

  • ERROR_ACCOUNT_MISSING.
    No hay cuenta de Google asociada en el dispositivo. Nuestra aplicación debería pedir al usuario que añada una cuenta desde el gestor de cuentas en los ajustes del dispositivo.
  • ERROR_AUTHENTICATION_FAILED.
    La contraseña de la cuenta de Google es incorrecta. Nuestra aplicación debería pedir al usuario que introdujese su contraseña desde el gestor de cuentas.
  • ERROR_INVALID_PARAMETERS.
    La petición enviada por el dispositivo no contiene los parámetros que eran esperados. El dispositivo no soporta GCM.
  • ERROR_INVALID_SENDER.
    No se reconoce el Sender ID. En este caso debemos revisar bien el Sender ID que estamos usando en nuestra aplicación, y comprobar que coincide con el que obtuvimos en la consola de Google APIs.
  • ERROR_PHONE_REGISTRATION_ERROR.
    Registro incorrecto del dispositivo. El dispositivo no soporta GCM.
  • ERROR_SERVICE_NOT_AVAILABLE.
    El dispositivo no pudo leer la respuesta, o el servidor GCM devolvió un código 500/503. No es un error de nuestra aplicación, por lo que deberemos reintentarlo más tarde.

Leer Más

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"/>

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

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.

Leer Más