X

Connexion

Connectez-vous pour confirmer

Mot de passe oublié ?

...ou se connecter via Facebook :

Vous n'avez pas encore de compte sur AndroidPIT ? Inscription

Licence d'application – Comment faire

Conditions préalables

Utilisez-vous déjà LVL ?

Si vous vous servez déjà de la bibliothèque de vérification de licences d'Android (LVL), utiliser la bibliothèque de licences d'AndroidPIT est très simple.

1.

Téléchargez la bibliothèque de licences AndroidPIT et ajoutez-la à votre projet.

2.

Changez les deux définitions variables suivantes de

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;

à

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

3.

Changez la création du checker de

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

à

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

4.

Changez la définition de votre listener de (par exemple)

    class MyLicenseCheckerCallback implements LicenseCheckerCallback

à

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback

5.

Changez le type du paramètre errorCode dans la méthode applicationError de

    public void applicationError(ApplicationErrorCode errorCode)

à

    public void applicationError(AndroidPitLicenseCheckCode errorCode)

et étendez le contrôle d'erreur avec les codes de réponse AndroidPIT (voir ci-dessous).

C'est tout ! L'appel à la méthode checker ainsi que les implémentations de la méthode de rappel allow() et dontAllow() n'ont pas besoin d'être changés.

À la volée

La bibliothèque de licences AndroidPIT est très similaire à l'Android License Verification Library (LVL) de Google. Pour utiliser la bibliothèque de licences AndroidPIT, ajoutez la Android License Verification Library (LVL) et la bibliothèque de licences AndroidPIT à votre projet. Dans la méthode onCreate(), créez une instance du AndroidPitLicenseChecker et fournissez-la avec une instance d'une classe qui implémente l'interface IAndroidPitLicenseCheckerCallback. Vous aurez également besoin d'un numéro de licence, qui vous sera fourni sur votre profil de développeur sur le site AndroidPIT. Un exemple d'une activité pourrait ressembler à ça :

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 plus de vérifier si la licence sur AndroidPIT est valide, la bibliothèque permet aussi de vérifier une licence sur l'Android Market. Pour cela, demandez à l'appel du constructeur de l'AndroidPitLicenseChecker de prendre la politique ainsi que la clé publique de Google. Veuillez consulter la documentation de la LVL si vous avez besoin d'aide pour l'installation.

/**
 * 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);

En détail

Le système de licence AndroidPIT est basé sur la Android License Verification Library (LVL), créée par Google. Il offre la possibilité de vérifier la validité d'installation d'une application Android acquis dans l'AndroidPIT App Center. Pour cela, il vous suffit de vous connecter au serveur de licences d'AndroidPIT via Internet. Il vous sera également demandé un compte AndroidPIT valide.

L'application vérifie si l'utilisateur final dispose d'une licence valide pour l'application en utilisant l'AndroidPIT Licensing Library à travers l'App Center. Pour faire ceci, l'App Center se connecte avec le serveur de licences et valide l'achat de l'application. La vérification de la validité se passe à travers le serveur de licence à chaque fois que l'applicaiton est démarrée, mais pas plus souvent qu'une fois par jour. Les contrôles provisoires redonnent la dernière valeur retournée par le serveur de licence (la période peut changer sans préavis à tout moment).

Étape par étape

Si vous utilisez Eclipse ADT, ce guide étape par étape a été créé pour vous. Si vous utilisez des outils de développement différents, vous pourrez être amené à faire plus d'étapes.

Téléchargez la bibliothèque de licences AndroidPIT et la Android License Verification Library (LVL) et ajoutez-les à Eclipse en tant que projets. Pour pouvoir utiliser la bibliothèque de licences AndroidPIT, vous devrez être en possession de la version Android API 4, sortie avec Android 1.6. Crééz une nouvelle application Android et ajoutez la bibliothèque de licences AndroidPIT dans les règlages en tant que bibliothèque dépendante du projet d'application. Veuillez vérifier que la bibliothèque crée des liens corrects vers l'Android License Verification Library (LVL).

Mon projet montre des symboles non résolus ou je ne peux pas compiler mon application.

Veuillez vérifier les chemins d'accès à la LVL Google et bibliothèque de licences AndroidPIT dans la boîte de dialogue "Préférences" de votre projet Android. Ils devraient correspondre aux chemins sur votre système de fichiers.

Application project settings

Les paramètres de bibliothèque de licences AndroidPIT devraient ressembler à ceci et devraient correspondre à vos chemins :

Library project settings

Comment puis-je configurer la licence de vérification dans mon code ?

Pour permettre à la bibliothèque de licences de chercher pour une licence valide via l'App Center d'AndroidPIT, veuillez générer une instance de la classe MyLicenseCheckerCallback dans la méthode onCreate()-. Le constructeur s'attend à une instance du contexte, qui est habituellement l'activité elle-même. Le code résultant peut ressembler à ceci :

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

Par ailleurs, le constructeur exige des informations sur le nom de paquet de votre application et sur la clef publique encodée base64, que nous vous fournissons sur votre profil de développeur sur AndroidPIT.

Comment puis-je recevoir un message du serveur de licences ?

La licence est vérifiée en appelant checkAccess() sur la vérification de licences AndroidPit. La méthode nécessite un objet de rappel qui implémente l'interface du rappel de la vérification de licences AndroidPit. Vous devez mettre en œuvre cette classe et de la remplir avec le code qui vous convient. La méthode allow() sera appelée depuis la bibliothèque de licences pour vous informer de la réussite de la validation de la licence. Dans tous les autres cas, dontAllow() est appelé. De plus, la méthode applicationError () vous informe des erreurs qui peuvent survenir lors de la vérification de licence. Vous contrôler ces actions, qui répondront à l'une de ces trois méthodes.

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
    }

}

Comment puis-je vérifier une licence dans l'Android Market ?

En plus de la vérification contre notre système de licences, nous fournissons une intégration de la Android License Verification Library (LVL) de Google qui est très facile à utiliser. Pour l'intégrer, il vous suffit d'ajouter au constructeur de notre vérification de licences AndroidPit la politique de votre LVL ainsi que votre clé publique. La vérification aura lieu à l'intérieur du code de la bibliothèque de licences. Si la vérification de licences de Google réussit, vous serez informé directement par l'objet de rappel à travers la méthode allow() que vous avez écrit quelques minutes plus tôt. Les réponses négatives se traduiront en une demande supplémentaire au serveur de licences AndroidPIT. Vous ne recevrez une réponse négative de la bibliothèque de licences uniquement si ces appels échouent.

Cet exemple est basé sur la documentation de l'API de Google.

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

Comment puis-je tester différents messages d'erreur du serveur de licences ?

Sur la page de licence de votre profil développeur chez AndroidPIT, vous pouvez mettre en place un code de réponse qui sera envoyé par le serveur de licences. Ceci est utile pour tester si votre application répond correctement aux messages d'erreur de notre serveur de licences. Pour ce faire, il vous suffit de sélectionner la valeur appropriée dans la liste déroulante. Le serveur de licences répondra par la suite toujours avec le code de réponse sélectionné, dès que vous serez connecté à votre compte développeur depuis votre appareil.

Comment puis-je désactiver le cache du résultat dans l'App Center ?

L'App Center conserve le résultat de la dernière demande pour au moins un jour ou jusqu'à ce que l'appareil réussisse à communiquer avec notre serveur de licences via Internet. Pour désactiver ceci, vous pouvez activer le mode débogage de votre vérificateur de licences, en appellant simplement setDebug(true). Cela désactivera la mise en cache de toutes les demandes envoyées à l'App Center. N'oubliez toutefois pas de désactiver le mode débogage avant de publier votre application.

Que se passe-t-il si l'utilisateur n'est pas connecté à l'App Center ?

Si aucune information d'identification n'a été enregistré par l'App Center, la bibliothèque affichera une boîte de dialogue popup pour demander l'adresse e-mail AndroidPIT et le mot de passe de l'utilisateur.

Comment puis-je m'assurer que les demandes parviendront au serveur de licences ?

La bibliothèque de licences AndroidPIT contient la classe tt>AndroidPitSignedLicenseChecker. Cette classe donne la possibilité de vérifier si la demande a atteint le serveur de licences, qui, le cas échéant, signera sa réponse grâce à la clé privée du développeur. La bibliothèque valide les données reçues avec la signature en utilisant la AndroidPitLicenseingResponseValidator

Un exemple d'utilisation du AndroidPitSignedLicenseChecker peut ressembler à ceci :

AndroidPitSignedLicenseChecker mChecker;

[ ... ]

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

Est-ce que je peux utiliser mon propre validateur de licences ? Je veux vérifier la signature moi-même.

Oui, c'est possible. Veuillez implémenter l'interface ILicensingResponseValidatorpuis donnez une instance de la classe d'implentation au AndroidPitSignedLicenseChecker. Cette classe doit implémenter deux méthodes. getSalt() doit renvoyer un nombre entier, qui sera renvoyé au serveur en tant que Salt dans la vérification de licences. Ce Salt doit être stocké pendant la demande pour pouvoir vérifier avec l'aide de l'autre Salt si ce contrôle est souhaité. La méthode tt>checkResponse()devrait valider les données de réponse et retourner un code de type AndroidPitLicenseCheckCode.NOT_LICENSED en cas d'échec. Si la validation réussit, le code de réponse du serveur doit être retourné. Pour voir un exemple d'implémentation, vous pouvez consulter AndroidPitLicensingResponseValidator sur la bibliothèque de licences AndroidPIT.

Mon projet ne peut pas trouver l'énumération de.androidpit.AndroidPitLicenseCheckError.

Cette énumération a été renommée de.androidpit.AndroidPitLicenseCheckCode.

Comment puis-je créer un objet de clef publique basé sur le Base64-String ?

Nous vous fournissons une clé publique sous forme de Base64 string encodé. Afin de vérifier la signature pour les données de réponse, vous devez convertir cette chaîne en un objet de clé publique. Le code suivant vous explique comment.

    /**
     * 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;
    }

Bibliothèque de licences AndroidPIT

Si vous utilisez l'ancienne bibliothèque de licences d'Android Market (Package com.android.vending.licensing), utilisez cette version de la bibliothèque de licence AndroidPIT
Bibliothèque de licences AndroidPIT Version 1.3

Si vous utilisez la nouvelle bibliothèque Google Play (Package com.google.android.vending.licensing), utilisez la version suivante de la bibliothèque de licences AndroidPIT :
Bibliothèque de licences AndroidPIT Version 2.1