X

Iniciar sesión

Regístrate para confirmar

¿Has olvidado tu contraseña?

... o ingresar con Facebook:

¿Todavía no tienes una cuenta en AndroidPIT? Crear cuenta

Licencia de aplicación – Cómo

Requisitos previos

¿Ya utilizas LVL?

Si ya utilizas Android License Verification Library, implementar AndroidPIT Licensing Library te será muy fácil.

1.

Descárgate AndroidPIT Licensing Library y añádelo a tu proyecto.

2.

Cambia las siguientes dos definiciones variables de

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;

a

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

3.

Cambia la creación del checker

    mChecker = new LicenseChecker(
            this,
            new ServerManagedPolicy(
                    this,
                    new AESObfuscator(SALT, getPackageName(), deviceId)),
            GOOGLE_PUBLIC_KEY);

a

    mChecker = new AndroidPitLicenseChecker(
            this,
            getPackageName(),
            ANDROIDPIT_PUBLIC_KEY,
            new ServerManagedPolicy(
                    this,
                    new AESObfuscator(SALT, getPackageName(), deviceId)),
            GOOGLE_PUBLIC_KEY);

4.

Cambia la definición de la lista de (ejemplo)

    class MyLicenseCheckerCallback implements LicenseCheckerCallback

a

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback

5.

Cambia el tipo de letra de errorCode parámetro en el applicationError método de

    public void applicationError(ApplicationErrorCode errorCode)

a

    public void applicationError(AndroidPitLicenseCheckCode errorCode)

y expande el control de errores con los códigos de respuesta de AndroidPIT (ver abajo).

¡Ya está! La llamada del inspector y el allow() y dontAllow() el método de implementaciones de devolución de llamada no necesita cambiarse.

Sobre la marcha

La AndroidPIT Licensing Library es muy similar a la Android License Verification Library (LVL) de Google. Para usar la AndroidPIT Licensing Library, añade la Android License Verification Library (LVL) y la AndroidPIT Licensing Library a tu proyecto. En tu método onCreate(), crea un ejemplo de AndroidPitLicenseChecker y proporcionarle un ejemplo de una clase que implemente la interfaz IAndroidPitLicenseCheckerCallback. En adición, se necesita una clave de licencia que te proporcionaremos en tu perfil de desarrollador en AndroidPIT. Un ejemplo de esta actividad puede tener el siguiente aspecto:

import android.app.Activity;

public class LicensingTest extends Activity implements OnClickListener
{

    private final String ANDROIDPIT_PUBLIC_KEY = "rO0ABXNyABRqYX...;"

    private final Handler mHandler = new Handler();

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
        mChecker = new AndroidPitLicenseChecker(
                this,
                getPackageName(),
                ANDROIDPIT_PUBLIC_KEY);

        setContentView(R.layout.main);

        mChecker.checkAccess(mLicenseCheckerCallback);
    }

    @Override
    protected void onDestroy
    {
        super.onDestroy();
        mChecker.onDestroy();
    }

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback
    {

        @Override
        public void allow()
        {
            // TODO: Handle positive response
        }

        @Override
        public void dontAllow()
        {
            // TODO: Handle negative response
        }

        @Override
        public void applicationError(AndroidPitLicenseCheckCode errorCode)
        {
            // TODO: Handle application error
        }

    }

}

En adición a la comprobación de una licencia válida en AndroidPIT, puedes permitir fácilmente que la licencia de AndroidPIT compruebe la de Android Market también. Para ello, adapta el contructor de llamada de AndroidPitLicenseChecker para conseguir tanto la política de Google como la clave pública de Google. Para todos estos pasos para instalar LVL, consulta el LVL documentation.

/**
 * Creates the AndroidPitLicenseChecker with all data to check against the
 * AndroidPIT App Center and Google. Google is checked first. If it fails,
 * AndroidPIT App Center will be consulted.
 
 @param context
 *            the context of the application
 @param appPkgName
 *            the package id of the app
 @param androidPitPublicKey
 *            the developers public key at AndroidPIT
 @param googlePolicy
 *            policy for Google licensing - @see LVL documentation
 @param googlePublicKey
 *            public key for Google licensing - @see LVL documentation
 */
public AndroidPitLicenseChecker(
        final Context context,
        final String appPkgName,
        final String androidPitPublicKey,
        final Policy googlePolicy,
        final String googlePublicKey);

Al detalle

La licencia del sistema de AndroidPIT está basada en la Android License Verification Library (LVL), creada por Google. Proporciona capacidades de comprobar la validez de las aplicaciones, que se adquirieren a través de AndroidPIT App Center. Un requisito también es tener una buena conexión al servidor de licencias de AncroidPIT a través de Internet. Además, el usuario final necesita tener una cuenta válida en AndroidPIT.

Con la ayuda de AndroidPIT Licensing Library, se comprobará a través de App Center si el usuario final posee una licencia válida para hacer funcionar la aplicación. La comprobación se aplica cada vez que se inica la aplicación pero lo más pronto una vez por día o cuando la conexión a Internet está disponible. Mientras tanto, el último valor de caché es el que responde (ten en cuenta que el tiempo en el que se valida el caché puede cambiar en cualquier momento).

Paso a paso

Esta guía paso a paso se basa en el hecho de que usas el Eclipse ADT. En caso de que estés utilizando otras herramientas de desarrollo, se te requirirán hacer unos cuantos pasos más.

Descárgate AndroidPIT Licensing library y Android License Verification Library (LVL) y añádelos como proyectos Eclipse. Para usar el AndroidPIT Licensing Library, necesitarás como mínimo la versión 4 de Android API, que se presentó con en su día junto con Android 1.6. Crea una nueva aplicación Android y agrega androidpit-licensing-lib en las preferencias bajo android como una biblioteca dependiente al proyecto d ela aplicación. Por favor, comprueba si la biblioteca enlaza correctamente con Android License Verification Library (LVL).

Mi proyecto muestra símbolos sin resolver o no puedo compilar mi aplicación.

Por favor, comprueba las rutas de Google LVL y AndroidPIT Licensing library dentro de las Preferencias de tu proyecto Android. Tienes que ser compatibles a las rutas del sistema de archivos.

Application project settings

Los ajustes de AndroidPIT Licensing Library deberían quedarse así, compatibiliza tus rutas:

Library project settings

¿Cómo instalo la licencia de comprobación en mi código?

Para permitir que licensing library compruebe si la licencia es válida a través de AndroidPIT App Center, crea un método de tu actividad en onCreate() de la clase MyLicenseCheckerCallback. El constructor espera una instancia del contexto, que normalmente es la actividad en sí. El código resultante debe ser así:

mLicenseCheckerCallback = new MyLicenseCheckerCallback();
mChecker = new AndroidPitLicenseChecker(
          this, getPackageName(), ANDROIDPIT_PUBLIC_KEY);
mChecker.checkAccess(mLicenseCheckerCallback);

Además, el constructor requiere información sobre el nombre del paquete de la aplicación y base64-encoded public key, que te facilitamos en tu perfil de desarrollador en AndroidPIT.

¿Cómo me notifica el servidor de licencias?

La licencia se comprueba llamando checkAccess() en el AndroidPitLicenseChecker. Este método necesita una respuesta de llamada que se implementa en la interface IAndroidPitLicenseCheckerCallback. Depende de ti, si quieres implementar esta clase e introducir un código que se ajuste a tus necesidades. Se llamará al método allow() con la Licensing Library para notificarte que se ha realizado con éxito. Por el contrario, se llamaría a dontAllow(). Además, el método applicationError() te informa sobre errores que se ha podido producir mediante la comprobación. Tú tienes el control total de estas acciones, que se llevarán a cabo en estos tres métodos.

class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback
{

    @Override
    public void allow()
    {
        // TODO: Handle positive response
    }

    @Override
    public void dontAllow()
    {
        // TODO: Handle negative response
    }

    @Override
    public void applicationError(AndroidPitLicenseCheckCode errorCode)
    {
        // TODO: Handle application error
    }

}

¿Cómo compruebo la licencia en Android Market?

Además de la verificación contra nuestro sistema de licencias, te facilitamos una integración a Android License Verification Library (LVL) de Google muy fácil de usar. Para integrarlo, facilita tu LVL y public key en el constructor de tu AndroidPitLicenseChecker. La verificación de licencia a continuación, se llevará a cabo dentro del código de la licencia de la biblioteca. Si la comprobación de licencia de Google tiene éxito, se le notificará directamente a través del objeto callback del método allow() que escribiste hace unos minutos. Las repsuestas negativas para solicitar información adicional a AndroidPIT sobre los servidores de licencia. Solo si estas llamadas fallan, recibirás una respuesta negativa de la licencia de biblioteca.

El ejemplo te orientará para la documentación del Google API.

mChecker = new AndroidPitLicenseChecker(
               this, 
               getPackageName()
               ANDROIDPIT_PUBLIC_KEY,
               new ServerManagedPolicy(
                   this,
                   new AESObfuscator(SALT, getPackageName(), deviceId)),
               GOOGLE_PUBLIC_KEY);

¿Cómo puedo comprobar diferneets mensajes de error desde el servidor de licencias?

En la página de licencia de tu perfil de desarrollador de AndroidPIT, puedes ajustar un código de respuesta que se enviará al servidor de licencias. Esto puede ser práctico si quieres comprobar que tu aplicación responda correctamente a los mensajes de error de nuestrp servidor de licencias. Para ello, sólo tienes que seleccionar el valor apropiado de la lista desplegable. A continuación, el servidor de licencias siempre responderá con el código de respuesta seleccionada si se ha identificado con tu cuenta de desarrollador en el dispositivo.

¿Cómo puedo deshabilitar el almacenamiento en caché del resultado en App Center?

App Center almacena el resultado de la última solicitud durante un día por lo menos o hasta que el dispositivo sea capaz de contactar con el servidor a través de Internet. Para deshabilitarlo, puedes activar el modo de depuración en la comprobación de licencias. Para ellos, llama a setDebug(true). Esto desactivará el almacenamiento en caché de todas las solicitudes enviadas al App Center. No te olvides de apagar el modo de depuración antes de publicar tu aplicación

¿Qué pasa si el usuario no ha iniciado sesión en el App Center?

Si el usuario no ha iniciado sesión en App Center, la biblioteca mostrará un popup para preguntarle al usuario que introduzca su dirección de correo electrónico y su contraseña.

¿Cómo puedo asegurarme de que las solicitudes de licencia llegan al servisor de licencias?

La License Library de AndroidPIT contiene la clase AndroidPitSignedLicenseChecker. Esta clase facilita la posibilidad de comprobar si las solicitudes han llegado al servidor o no. Para asegurarse de que el servidor de licencias inicia la respuesta de licencia usando la key privada del desarrollador de la aplicación. La biblioteca valida el recibo de datos con la firma usando el AndroidPitLicenseingResponseValidator revisado y comprobado si el Salt se envió en la solicitud es conforme con la respuesta. Otro problema sería si no hay disponibilidad de almacenamiento en caché del estado de la licencia en App Center. El servidor de licencias debe procesar cada solicitud. Si el usuario no está conectado a Internet a disposición de la biblioteca, ésta responderá de forma negativa con ERROR_NOT_CONNECTED.

Un ejemplo de AndroidPitSignedLicenseChecker debe ser así:

AndroidPitSignedLicenseChecker mChecker;

[ ... ]

mChecker = new AndroidPitSignedLicenseChecker(
               this, 
               getPackageName()
               ANDROIDPIT_PUBLIC_KEY);

¿Puedo dar mi propia licencia de validación? Quiero comprobar personalmente la validez de la respuesta.

Sí, es posible. Por favor, implementa el interfaz ILicensingResponseValidator y facilita una instancia de la clase de implementación de AndroidPitSignedLicenseChecker. Esta clase posee dos métodos para implementar.getSalt() debe devolverte un íntegro que te sirve para la comprobación de licencia como Salt en el servidor. Esta Salt se debe memorizar durante el la petición para que sea capaz de verificar la Salt devuelta en la respuesta, si es importante en el proceso de validación. El método checkResponse() debe validar la respuesta de datos y debe devolver un AndroidPitLicenseCheckCode.NOT_LICENSED en caso de que falle. Si la validación se realiza con éxito, el código de la respuesta del servidor tiene que devolver. Como ejmplo, puedes consultar AndroidPitLicensingResponseValidator de la biblioteca de licencias de AndroidPIT

Mi proyecto no puede encontrar la enumeración de.androidpit.AndroidPitLicenseCheckError.

Se ha cambiado el nombre de esta enumeración a de.androidpit.AndroidPitLicenseCheckCode.

¿Cómo puedo crear una PublicKey basada en una cadena Base64?

Como has visto que te proporcionamos la key pública (public key) como una cadena codificada en Base-64 con el fin de comprobar la firma, los datos de respuesta que se requieren para convertir esta cadena en un objeto PublicKey. El código siguiente le mostrará cómo lograrlo.

    /**
     * Converts the base64 encoded representation of a public key into a
     * PublicKey object.
     */
    private PublicKey createPublicKey(String pubKeyBase64)
    {

        PublicKey pubKey = null;
        try
        {
            // the pub key comes in as a Base64 coded string. Decode to the
            // byte array which contains the object stream of the public key
            ByteArrayInputStream pubKeyByteArray = new ByteArrayInputStream(
                    Base64.decode(pubKeyBase64));
            ObjectInputStream publicKeyObject = new ObjectInputStream(
                    pubKeyByteArray);
            BigInteger modulus = (BigIntegerpublicKeyObject.readObject();
            BigInteger exponent = (BigIntegerpublicKeyObject.readObject();

            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent);
            KeyFactory rsaKeyFactory = KeyFactory.getInstance("RSA");
            pubKey = rsaKeyFactory.generatePublic(keySpec);
        }
        catch (Exception ex)
        {
            Log.e(
                    "LicenseResponseValidator",
                    "Deserialization of public key failed.",
                    ex);
        }
        return pubKey;
    }

AndroidPIT Licensing Library

Si estás usando la licencia antigua de biblioteca de Android Market (Package com.android.vending.licensing), utiliza esta versión de la licencia de biblioteca de AndroidPIT:
AndroidPIT Licensing Library Version 1.3

Si estás usando la nueva versión de biblioteca de Google Play (Package com.android.vending.licensing), utiliza la siguiente versión de la licencia de biblioteca de AndroidPIT:
AndroidPIT Licensing Library Version 2.1