Obtención de licencias con Google Play

Google Play ofrece un servicio de concesión de licencias que te permite consultar en tiempo de ejecución si el usuario actual dispone de licencia para usar tu aplicación. Su uso más frecuente es asegurarnos que en las aplicaciones de pago el usuario realmente ha pagado. No obstante, también puede ser muy útil en cualquier tipo de aplicación, para asegurarnos que se está utilizando la aplicación original.

Con este servicio se puede aplicar una política de licencias flexibles. Una aplicación puede solicitar restricciones personalizadas basadas en el estado de la licencia obtenida de Google Play. Por ejemplo, una aplicación puede comprobar el estado de la licencia y luego aplicar restricciones personalizadas que permiten que el usuario lo ejecute sin licencia por un período limitado o permitiendo un uso parcial de la aplicación.

Para ayudar a verificar licencias, el SDK de Android proporciona un conjunto descargable de fuentes de biblioteca. La biblioteca de verificación de licencias (LVL) se puede agregar a tu aplicación de manera que solo tienes que llamar a un método para conocer el estado de la licencia.

Para usar el servicio de licencias tu aplicación ha de tener un nivel mínimo de API de 3 (v1.5). Otra restricción es que en el terminal ha de estar preinstalada la aplicación cliente de Google Play, dado que es realmente este componente el que se comunicará con el servidor de licencias. En los emuladores no se incluye el cliente de Google Play con plena funcionalidad, lo que dificulta la comprobación de los ejercicios de este capítulo. Si no puedes utilizar un terminal real, tendrás que realizar algún ajuste para conseguir que funcione sobre un emulador[1].

Cómo funciona el servicio de licencias

El servicio de licencias de Google Play es un mecanismo basado en red que permite consultar a la aplicación si el usuario del dispositivo actual dispone de licencia. El siguiente diagrama ilustra el funcionamiento de este servicio:

Elementos involucrados en la verificación de una licencia.

 

La solicitud se inicia cuando la aplicación realiza una solicitud de comprobación de licencia. Para ello utilizará la librería LVL, en concreto el método License­Checker.checkAccess(). Desde esta librería se invoca un servicio ofrecido por la aplicación cliente de Google Play. A continuación, la aplicación de Google Play envía una petición al servidor de licencias y recibe el resultado. La aplicación Google Play envía el resultado a la librería LVL, desde donde se invoca un método callback diferente según el resultado. Estos métodos callback (allow(), dontAllow(), applicationError()) han de estar definidos en tu aplicación.

Para hacer la consulta de licencia hay que identificar la aplicación, el usuario y el dispositivo: la aplicación se identifica mediante nombre del paquete, el usuario mediante la cuenta Google configurada en el dispositivo y el dispositivo mediante el IMSI y otra información. El servidor de Google Play evalúa la solicitud utilizando esta información. Comprueba la identidad del usuario con los registros de compra o instalación y devuelve una respuesta.

Para asegurar la integridad de la respuesta, el servidor la firma antes de enviarla. Para cada aplicación que demos de alta en el servicio de licencias se van a crear un par de claves RSA de 2048 bits. La clave privada solo es conocida por el servidor de licencias, mientras que la pública ha de ser conocida por nuestra aplicación. Como es habitual, la clave privada se utilizará para firmar las respuestas del servidor y la pública para verificar esta firma. Esta forma de trabajar impide que se pueda engañar al sistema con respuestas falsificadas.