X

Fazer o login

Registre-se para confirmar

Esqueceu a sua senha?

Faça o Login com o Facebook:

Ainda não tem uma conta no AndroidPIT? Criar conta

Adquirir Licença de App – Instruções

Pré-requisitos

Você já está usando LVL?

Se você já está usando o Android License Verification Library, implementar a AndroidPIT Licensing Library será muito fácil.

1.

Faça o download do AndroidPIT Licensing Library e adicione-o ao seu projeto.

2.

Altere as seguintes duas definições de variáveis ​​de

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;

para

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

3.

Altere a criação do verificador de

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

para

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

4.

Altere a definição de seu listador (exemplo)

    class MyLicenseCheckerCallback implements LicenseCheckerCallback

para

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback

5.

Altere o tipo de errorCode parâmetro no applicationError método de

    public void applicationError(ApplicationErrorCode errorCode)

para

    public void applicationError(AndroidPitLicenseCheckCode errorCode)

e expanda o controle de erros com os códigos de resposta do AndroidPIT (ver abaixo).

Isso é tudo! A chamada do verificador e o allow() e dontAllow() o método de implementações de devolução de chamada não precisam ser alterados.

No Quick Run

O AndroidPIT Licensing Library é muito similar ao Android License Verification Library (LVL) do Google. Para o usar o AndroidPIT Licensing Library, adicione o Android License Verification Library (LVL) e o AndroidPIT Licensing Library ao seu projeto. Em seu método onCreate(), crie um instância de AndroidPitLicenseChecker e forneça uma instância de uma classe que implemente a interface IAndroidPitLicenseCheckerCallback. Adicionalmente, você solicita uma chave de licença, a qual nós providenciaremos para você em seu perfil de desenvolvedor no website do AndroidPIT. Um exemplo de uma atividade deve se parecer com isso:

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
        }

    }

}

Em complemento à verificação de uma licença válida em AndroidPIT, você pode facilmente permitir o AndroidPIT Licensing verificar no Android Market, também. Para fazê-lo, adapte o construtor de chamada do AndroidPitLicenseChecker para conseguir tanto a política do Google com a chave pública do Google. Para todos os outros passos de configuração do LVL, por favor, consulte a documentação LVL.

/**
 * 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 Detail

O sistema de Licensing do AndroidPIT está baseado na Android License Verification Library (LVL) criada pelo Google. Ele proporciona a capacidade de verificar a validade dos apps que foram comprados através do App Center do AndroidPIT. Um requisito também é a conexão ao servidor de licença do AndroidPIT através da Internet. Ademais, o usuário final necessita ter uma conta válida no AndroidPIT.

Com a ajuda do AndroidPIT Licensing Library, seu aplicativo será verificado através do App Center se o usuário final está em possessão de uma licença válida para executar o app. A verificação de validade acontece toda vez que uma aplicação inicia-se, mas o mais cedo uma vez por dia ou quando existe disponível uma conexão internet. Nesse meio tempo um valor em cache é retornado a partir do último pedido (leve em conta que o período de tempo em que o cache é válido pode mudar a qualquer momento).

Passo a passo

Este guia passo a passo é baseado no fato de que você está usando o Eclipse ADT. Caso você esteja usando outras ferramentas de desenvolvimento, você talvez será solicitado a fazer mais alguns passos.

Faça o download da AndroidPIT Licensing Library e da Android License Verification Library (LVL) e adicione-as como projetos do Eclipse. Para usar a AndroidPIT Licensing Library, é requerida, pelo menos, a versão 4 do Android API, a qual foi criada com o Android 1.6. Crie uma nova aplicação Android e adicione o androidpit-licensing-lib em preferências em android como uma biblioteca dependente ao projeto da aplicação. Por favor, verifique se a biblioteca aponta corretamente para a Android License Verification Library (LVL).

Meu projeto mostra símbolos não resolvidos ou não consigo compilar meu app.

Por favor, verifique os caminhos para o Google LVL e para a AndroidPIT Licensing Library em Preferências em seu Projeto Android. Eles devem corresponder aos caminhos no seu sistema de arquivos.

Application project settings

As configurações para a AndroidPIT Licensing Library devem parecer com isso, correspondendo aos seus caminhos:

Library project settings

Como eu faço para instalar a verificação de licença em meu código?

Para permitir que a Licensing Library verifique se uma licença é valida no App Center do AndroidPIt, instancie no método onCreate() de sua atividade uma instância da classe MyLicenseCheckerCallback. O construtor espera uma instância do contexto que normalmente é a atividade em si. O código resultante deve ser assim:

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

Ademais, o contrutor requer informações sobre o nome do pacote de seu app e a chave pública de codificação base64, os quais nós providenciamos para você em seu perfil de desenvolvedor no AndroidPIT.

Como sou notificado pelo servidor de licença?

A licença é verificada chamando checkAccess() na instância AndroidPitLicenseChecker. O método requer um objeto de callback que implemente a interface IAndroidPitLicenseCheckerCallback. Fica a seu critério implementar esta classe e preenchê-la com um código que corresponda às suas necessidades. O método allow() será chamado dentro da Licensing Library para notificá-lo sobre a validação com sucesso da licença do usuário. Em outro caso, dontAllow() é chamado. Adicionalmente, o método applicationError() informa-lhe sobre erros que possam acontecer durante a verificação da licença. Você tem total controle de ações que podem acontecer nesses três 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
    }

}

Como faço para verificar adicionalmente uma licença no Android Market?

Em complemento à verificação contra nosso sistema de licensing, nós providenciamos uma integração de fácil uso da Android License Verification Library (LVL) do Google. Para integrá-la, basta adicionar sua política de LVL e a chave pública ao construtor de nosso AndroidPitLicenseChecker. A verificação de licença acontecerá dentro do código da biblioteca de licença. Se a verificação de licença contra o Google tiver sucesso, você será diretamente notificado pelo objeto callback através do método allow() que você escreveu alguns minutos atrás. Respostas negativas resultarão em uma solicitação adicional aos servidores do AndroidPIT Licensing. Somente no caso destas chamadas falharem é que você receberá uma resposta negativa da Licensing Library.

Este exemplo vai orientá-lo para o exemplo do Google API.

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

Como faço para testar diferentes mensagens de erro do servidor de licenças?

Na página da licença de seu perfil de desenvolvedor do AndroidPIT, você pode definir um código de resposta que será enviado para o servidor de licenças. Isto é útil se você quiser testar se uma aplicação responde corretamente às mensagens de erro de nosso servidor de licenças. Para realizar isso, apenas selecione o valor apropriado na lista abaixo. Em seguida, o servidor de licença sempre responderá com o código de resposta selecionado se você está logado com sua conta de desenvolvedor em seu dispositivo de teste.

Como faço para desabilitar o armazenamento no cache do resultado do App Center?

O App Center armazena o resultado da última solicitação por pelo menos um dia ou até que o dispositivo móvel consiga contactar nosso servidor de licenças através da Internet. Para desabilitar esse armazenamento no cache, você pode habilitar o modo debug no verificador de licença. Para fazê-lo, digite o comando setDebug(true). Isto irá desabilitar o cache de todas os pedidos enviados ao App Center. Não se esqueça de desligar o modo debug antes de publicar seu app.

O que acontece se o usuário não estiver logado no App Center?

Se nenhuma credencial ou credenciais inválidas forem armazenadas no App Center, a biblioteca exibirá um caixa de diálogo pedindo o e-mail e a senha do usuário do AndroidPIT.

Como eu posso me assegurar que o pedido de licença chega no servidor de licenças?

A AndroidPIT Licensing Library contém a classe AndroidPitSignedLicenseChecker. Esta classe fornece a possibilidade de verificar se um pedido chegou ao servidor de licença ou não. Para assegurar-se de que o servidor de licenças inicia a resposta de licença usando a chave privada do desenvolvedor do app. A biblioteca valida os dados recebidos com uma assinatura usando o AndroidPitLicenseingResponseValidator e comparando o envio do Salt no pedido com o Salt encontrado nos dados da resposta. Por favor, considere que este mecanismo não fornece qualquer cache do status da licença. Qualquer resposta deve ser calculada no servidor de licença pelo pedido de dados dado. Caso o usuário não tenha qualquer conexão com o servidor de licenças, a biblioteca responde com o seguinte: ERROR_NOT_CONNECTED.

Um exemplo de uso do AndroidPitSignedLicenseChecker é semelhante a isto:

AndroidPitSignedLicenseChecker mChecker;

[ ... ]

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

Posso fornecer meu próprio validador de licença? Eu quero verificar a validade de resposta pessoalmente.

Sim, isso é possível. Por favor, implemente a Interface ILicensingResponseValidator e forneça uma instância da classe implementadora ao AndroidPitSignedLicenseChecker. Esta classe terá que implementar dois métodos. O getSalt() tem que retornar um integer, o qual será usado com um Salta na validação da verificação da licença. Este Salt deve ser armazenado durante o pedido para poder verificar contra o Salt de retorno na resposta se esta verificação é desejada. O método checkResponse() deve validar a resposta de dados e retornar um AndroidPitLicenseCheckCode.NOT_LICENSED em caso de falha. Se a validação ocorrer com sucesso, o código de resposta do servidor tem que ser retornado. Como um modelo de implementação, você pode consultar AndroidPitLicensingResponseValidator da AndroidPIT Licensing Library.

Meu projeto não encontra a enumeração de.androidpit.AndroidPitLicenseCheckError.

A enumeração foi renomeada para de.androidpit.AndroidPitLicenseCheckCode.

Como faço para criar uma PublicKey baseada em uma cadeia Base64?

Como você pode ter percebido, nós fornecemos uma chave pública como uma cadeia codificada em Base64. Com o fim de verificar a assinatura da resposta de dados, você será solicitado a converter essa cadeia (string) em um objeto PublicKey. O código seguinte mostrará a você como realizar isso.

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

Se você estiver usando o antigo licenciamento da biblioteca Android Market (Package com.android.vending.licensing), use a seguinte versão de licenciamento da biblioteca AndroidPIT:
AndroidPIT Licensing Library Version 1.3

Se usa a nova biblioteca Google Play (Package com.google.android.vending.licensing), use a seguinte versão de licenciamento da biblioteca AndroidPIT:
AndroidPIT Licensing Library Version 2.1