Google Play Licensing es un servicio basado en red que permite a una aplicación consultar un servidor de licencias de Google Play confiable para determinar si la aplicación tiene una licencia para el usuario actual del dispositivo. El servicio de licencias se basa en la capacidad que tiene el servidor de licencias de Google Play para establecer si un usuario dado tiene licencia para usar una aplicación determinada. Google Play considera que un usuario tiene una licencia si es un comprador registrado de la aplicación.
La solicitud comienza cuando tu aplicación realiza una solicitud a un servicio alojado por la aplicación cliente de Google Play. Luego, la aplicación de Google Play envía una solicitud al servidor de licencias y recibe el resultado. La aplicación de Google Play envía el resultado a tu aplicación, lo que puede habilitar o inhabilitar el uso posterior de la aplicación según sea necesario.
Nota: Si una versión de una aplicación se encuentra en el segmento de pruebas cerradas o abiertas, todos los usuarios que están autorizados a descargar e instalar esa aplicación se consideran usuarios con licencia de la aplicación. Para obtener más información, consulta Cómo usar segmentos de prueba para obtener comentarios valiosos de los usuarios.
![](https://developer.android.com/static/images/google/play/licensing/licensing_arch.png?authuser=0000&hl=es)
Figura 1: Tu aplicación inicia una verificación de licencia a través de la biblioteca de verificación de licencias y el cliente de Google Play, que administra la comunicación con el servidor de Google Play.
Nota: Antes, se podía probar el funcionamiento de una app subiendo una versión de "borrador" no publicada. Esta función ya no es compatible. En su lugar, debes publicarla en los segmentos de pruebas cerradas o abiertas. Para obtener más información, consulta Ya no se admiten apps de borrador.
Para identificar adecuadamente al usuario y determinar el estado de la licencia, el servidor de licencias requiere información sobre la aplicación y el usuario: tu aplicación y el cliente de Google Play trabajan juntos para reunir la información, y el cliente de Google Play la pasa al servidor.
Para ayudarte a agregar licencias a tu aplicación, el SDK de Android proporciona un conjunto descargable de fuentes de biblioteca que puedes incluir en tu proyecto de aplicación: el paquete Google Market Licensing. La biblioteca de verificación de licencias (LVL) es una biblioteca que puedes agregar a tu aplicación y que administra toda la comunicación relacionada con licencias con el servicio de licencias de Google Play. Con la LVL, tu aplicación puede determinar el estado de su licencia para el usuario actual simplemente mediante un llamado a un método y la implementación de una devolución de llamada que recibe la respuesta de estado.
Tu aplicación no consulta directamente al servidor de licencias, sino que llama al cliente de Google Play mediante IPC remoto para iniciar una solicitud de licencia. En la solicitud de licencia, sucede lo siguiente:
- La aplicación proporciona el nombre del paquete, una instancia que se usa posteriormente para validar cualquier respuesta del servidor y una devolución de llamada sobre la cual se puede mostrar la respuesta de manera asíncrona.
- El cliente de Google Play recopila la información necesaria sobre el usuario y el dispositivo, como el nombre de usuario principal de la Cuenta de Google, el IMSI y otra información. Luego, envía la solicitud de verificación de licencia al servidor en nombre de tu aplicación.
- El servidor de Google Play evalúa la solicitud con toda la información disponible a fin de intentar establecer la identidad del usuario con un nivel de confianza suficiente. Luego, el servidor comprueba la identidad del usuario con los registros de compra de tu aplicación y muestra una respuesta de licencia que el cliente de Google Play muestra a tu aplicación durante la devolución de llamada de IPC.
Puedes elegir cuándo y con qué frecuencia deseas que tu aplicación verifique su licencia, y tienes control total sobre cómo procesa la respuesta, verifica los datos de respuesta firmados y aplica los controles de acceso.
Ten en cuenta que, durante una verificación de licencia, tu aplicación no administra ninguna conexión de red ni utiliza ninguna API relacionada con la licencia en la plataforma Android.
Las respuestas de licencia son seguras
Para garantizar la integridad de cada consulta de licencia, el servidor firma los datos de respuesta de la licencia mediante un par de claves RSA que se comparte exclusivamente entre el servidor de Google Play y tú.
El servicio de licencias genera un único par de claves de licencia para cada aplicación y expone la clave pública en la página Servicios y API de tu aplicación en Play Console. Debes copiar la clave pública de Play Console e insertarla en el código fuente de la aplicación. El servidor retiene la clave privada internamente y la usa para firmar respuestas de licencia para las aplicaciones que publicas con esa cuenta.
Cuando tu aplicación recibe una respuesta firmada, usa la clave pública incorporada para verificar los datos. El uso de la criptografía de clave pública en el servicio de licencias hace posible que la aplicación detecte respuestas que fueron manipuladas o falsificadas.
Biblioteca de verificación de licencias
El SDK de Android proporciona un paquete descargable llamado Google Market Licensing, que incluye la biblioteca de verificación de licencias (LVL). La LVL simplifica enormemente el proceso de agregar licencias a tu aplicación y ayuda a garantizar que su implementación sea más segura y sólida. La LVL proporciona clases internas que controlan la mayoría de las operaciones estándar de una consulta de licencia, como comunicarse con el cliente de Google Play para iniciar una solicitud de licencia y verificar y validar las respuestas. También expone interfaces que te permiten conectar fácilmente tu código personalizado para definir la política de licencias y administrar el acceso según lo necesite tu aplicación. Las interfaces clave de LVL son las siguientes:
Policy
- Tu implementación determina si se debe permitir el acceso a la aplicación en función de la respuesta de licencia recibida del servidor y de cualquier otro dato disponible (como un servidor de backend asociado a tu aplicación). La implementación puede evaluar los diversos campos de la respuesta de la licencia y aplicar otras restricciones si es necesario. La implementación también te permite administrar el control de las verificaciones de licencia que generan errores, como los de red.
LicenseCheckerCallback
- Tu implementación administra el acceso a la aplicación en función del resultado del control de la respuesta de licencia por parte del objeto
Policy
. Tu implementación puede administrar el acceso de cualquier forma necesaria, incluso puede mostrar el resultado de la licencia en la IU o indicar al usuario que compre la aplicación (si no tiene licencia actualmente).
Para ayudarte a comenzar con una Policy
, la LVL proporciona dos implementaciones completas de Policy
que puedes adaptar a tus necesidades o usar sin modificar:
ServerManagedPolicy
- Es un objeto
Policy
flexible que usa la configuración proporcionada por el servidor de licencias para administrar el almacenamiento en caché y el acceso a la aplicación cuando el dispositivo no tiene conexión (por ejemplo, si el usuario está en un avión). Para la mayoría de las aplicaciones, se recomienda usarServerManagedPolicy
. StrictPolicy
- Es un objeto
Policy
restrictivo que no almacena en caché ningún dato de respuesta y permite que la aplicación acceda solo cuando el servidor muestra una respuesta con licencia.
La LVL está disponible como un paquete descargable del SDK de Android. El paquete incluye la LVL y una aplicación de ejemplo que muestra cómo se debe integrar la biblioteca con tu aplicación y cómo esta debe administrar los datos de respuesta, la interacción de la IU y las condiciones de error.
Las fuentes de la LVL se proporcionan como un proyecto de biblioteca de Android, lo que significa que puedes mantener un único conjunto de fuentes de biblioteca y compartirlas en varias aplicaciones. Mediante el SDK, también está disponible un entorno de prueba completo, por lo que puedes desarrollar y probar la implementación de licencias en tus aplicaciones antes de publicarlas, incluso si no tienes acceso a un dispositivo físico.
Requisitos y limitaciones
Google Play Licensing está diseñado para permitirte aplicar controles de licencia a las aplicaciones que publicas mediante Google Play. El servicio no está diseñado para permitirte controlar el acceso a aplicaciones que no se publican mediante Google Play o que se ejecutan en dispositivos que no ofrecen el cliente de Google Play.
Estos son algunos puntos para tener en cuenta cuando implementes las licencias en tu aplicación:
- Una aplicación puede usar el servicio solamente si el cliente de Google Play está instalado en tu dispositivo host y el dispositivo ejecuta Android 1.5 (API nivel 3) o superior.
- Para completar una verificación de licencia, debes poder acceder al servidor de licencias mediante la red. Puedes implementar comportamientos de almacenamiento de licencias en caché para administrar el acceso a tu aplicación cuando no hay conectividad de red.
- La seguridad de los controles de licencia de tu aplicación depende en última instancia del diseño de tu propia implementación. El servicio proporciona los componentes básicos que te permiten verificar de forma segura las licencias, pero la aplicación y el control reales de la licencia son factores sobre los que tú decides. Si sigues las recomendaciones de los siguientes documentos, te asegurarás de que tu implementación sea segura.
- Agregar licencias a una aplicación no afecta el funcionamiento de esta cuando se ejecuta en un dispositivo que no ofrece Google Play.
- Puedes implementar controles de licencia en una aplicación gratuita, pero solo si estás utilizando el servicio para proporcionar archivos de expansión APK.
Reemplazo para protección de copias
Google Play Licensing es un mecanismo flexible y seguro que se usa para controlar el acceso a tus aplicaciones. Reemplaza efectivamente el mecanismo de protección de copias que se ofrecía anteriormente en Google Play (y ya no es compatible) y te brinda un mayor potencial de distribución para tus aplicaciones.
Las licencias te permiten pasar a un modelo basado en licencias que se puede aplicar en todos los dispositivos que tienen acceso a Google Play. El acceso no está vinculado a las características del dispositivo host, sino a tu aplicación en Google Play (mediante la clave pública de la aplicación) y la política de licencia que definas. Tu aplicación se puede instalar y administrar en cualquier dispositivo y en cualquier almacenamiento, incluida la tarjeta SD.
Aunque ningún mecanismo de licencia puede evitar por completo todo uso no autorizado, el servicio de licencias te permite controlar el acceso a la mayoría de los tipos de uso normal en todos los dispositivos compatibles, bloqueados o desbloqueados.
Para comenzar a agregar licencias de aplicaciones a tu aplicación, continúa con Cómo realizar la configuración para licencias.