Sobre App Licensing

Com o licenciamento app do Android, cada dispositivo controlos um servidor para se certificar de que este dispositivo tem permissão para executar seu aplicativo. O licenciamento é importante para qualquer aplicativo pago. O licenciamento é também uma boa precaução com um aplicativo gratuito (para ajudar você a manter a propriedade do conceito do app). Este artigo orienta-lo através dos passos para adicionar um regime de licenciamento simples para o seu aplicativo Android.

Criando um novo aplicativo Android

Criar um novo projeto Android da maneira que você normalmente faz. Ao configurar um SDK mínima, selecione API Nível 19 ou inferior. Nos novos aplicativos de build.gradle arquivo, altere a targetSdkVersion para 19 ou inferior. (É preciso mais trabalho a fazer licenciamento quando você atingir um nível API mais novo).

A biblioteca de licenciamento

Aqui está uma maneira de adicionar biblioteca de licenciamento do Google para o seu projeto:

  1. No menu principal do Android Studio, selecione Ferramentas-Android-SDK Manager.

  2. Na guia SDK Tools do SDK Manager, selecione Google Play Licensing Library.

  3. Clique em OK para baixar e instalar a biblioteca de licenciamento.

  4. Quando a instalação estiver concluída, clique em Concluir para fechar o Gerenciador de SDK.

  5. No menu principal do Android Studio, selecione Estrutura File-Project.

  6. No lado esquerdo da caixa de diálogo Estrutura do projeto, selecione o item SDK Localização.

  7. No corpo principal da caixa de diálogo Estrutura do projeto, observe a entrada no campo de texto Android SDK Localização.

    Este é o lugar em seu disco rígido onde o Android SDK foi instalado.

  8. Clique em OK para fechar a caixa de diálogo Estrutura do Projeto.

  9. Com o seu computador de desenvolvimento File Explorer ou no Finder, visitar o local em seu disco rígido onde o Android SDK está instalado.

  10. Navegue para baixo para o extras / google / play_licensing / / src / com biblioteca.

    Nesse diretório, você encontrará um subdiretório chamado Google.

  11. Copie o diretório do Google para o seu aplicativo app / diretório src / main / java / com.

Agora do seu aplicativo app / src / main / java / com diretório tem dois subdiretórios. Por exemplo, se uma aplicação está em um pacote denominado com.allyourcode.licensingdemo, do aplicativo app / src / main / java / com diretório tem subdiretórios nomeados allyourcode e Google. Você pode ver isso com o seu computador File Explorer ou no Finder, mas você também pode vê-lo na janela ferramenta Project do Android Studio (como mostrado aqui).

Alguns novos subdiretórios.
Alguns novos subdiretórios.

Obtendo uma chave de licença para a sua aplicação

Você precisa de uma chave de licença para publicar este aplicativo. Para obter a sua chave, faça o seguinte:

  1. Visita Google Play da loja desenvolvedor Console.

  2. No console do desenvolvedor, clique no botão Novo aplicativo em Adicionar.

    Uma página Adicionar Novo Aplicativo aparece.

  3. Na página Adicionar novo aplicativo, digite um título para sua nova aplicação.

  4. Ainda na página Adicionar Novo Aplicativo, clique na Listagem loja botão Prepare.

    Você é levado a uma página de loja Listing.

  5. No lado esquerdo da página da loja Listing, seleccione Serviços e APIs.

    alterações de conteúdo da página listagem.

  6. Na página Armazenamento de Listing, procure um monstruosamente longa sequência de caracteres como o mostrado aqui.

    A monstruosamente longa sequência de números.
    A monstruosamente longa sequência de números.
  7. Copie essa sequência de caracteres, e colá-lo em um arquivo de texto simples no disco rígido do seu computador de desenvolvimento.

Modificando o seu app para o licenciamento

Em seguida, você tem que adicionar código ao seu aplicativo para que o aplicativo verifica o servidor de licenciamento antes de permitir que o cliente possa usá-lo. Aqui está um exemplo de esqueleto. (Para uma amostra mais rica, ver o código no SDK do extras / google / play_licensing / sample pasta.)

importação android.app.Activity-import android.content.Intent-import android.os.Bundle-import android.provider.Settings-import com.google.android.vending com.google.android.vending.licensing.AESObfuscator-importação. licensing.LicenseChecker-import com.google.android.vending.licensing.LicenseCheckerCallback-import classe com.google.android.vending.licensing.ServerManagedPolicy-pública MainActivity estende Atividade {string BASE64_PUBLIC_KEY private static final = "sua chave pública VAI AQUI" - byte private static final [] SAL = new byte [] {// Vinte números (variando de // -128 a +127) aqui} -Privada LicenseCheckerCallback mLicenseCheckerCallback-privada boolean LicenseChecker mChecker-privada keepGoing = verdade- @ vazio Overridepublic onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView (R.layout.activity_main) -String deviceId = Settings.Secure.getString (getContentResolver (), Settings.Secure.ANDROID_ID) -mLicenseCheckerCallback = new MyLicenseCheckerCallback () - mChecker = nova LicenseChecker (esta, novo ServerManagedPolicy (esta, novo AESObfuscator (SALT, getPackageName (), deviceId)), BASE64_PUBLIC_KEY) -doCheck () -} @ Overridepublic vazio onResume () {super.onResume () - if (keepGoing!) { acabamento () -}} private void doCheck () {mChecker.checkAccess (mLicenseCheckerCallback) -} MyLicenseCheckerCallback classe privada implementa LicenseCheckerCallback {public void permitir (int policyReason) {if (isFinishing ()) {// não atualizar UI se Atividade é finishing.return -}} public void dontAllow (int policyReason) {if (isFinishing ()) {} voltar- keepGoing = falso-Intenção intenção = new Intent (MainActivity.this, NotLicensedActivity.class) -intent.putExtra ( "mensagem "., getResources () getString (R.string.app_not_licensed) +" (0 x "+ Integer.toHexString (policyReason) +") ") - startActivity (intenção) -} public void Applicationerror (int errorCode) {if (isFinishing ( )) {} regresso- keepGoing = false-intenção intenção = new Intent(MainActivity.this,NotLicensedActivity.class)-intent.putExtra("message",getResources().getString(R.string.application_error) + "(0 x" + Integer.toHexString (errorCode) + ")") - startActivity (intenção) -}} @ onDestroy vazio Overrideprotected () {super.onDestroy () - mChecker.onDestroy () - // Não se esqueça esta linha. Sem ele, o aplicativo pode falhar.}}

Para fazer este trabalho código de exemplo, você tem que adicionar alguns ingredientes extras:

  • Na atividade principal, substituir as palavras Sua chave pública VAI AQUI com a sua própria chave de licença a partir de Passos 6 e 7 na seção "Obtendo uma chave de licença para o seu app" deste artigo.

  • Faça a sua própria 20-number valor SALT - um termo extravagante para um conjunto de valores produzidos aleatoriamente - e adicioná-lo ao código a principal atividade.

  • Crio app_not_licensed e erro de aplicação recursos de cadeia.

  • Adicionar ao arquivo AndroidManifest.xml do projeto.

  • Adicionar qualquer um código de seu próprio aplicativo para o código de exemplo. (Em outras palavras, fazer o seu app faz o que é suposto fazer - jogar um jogo, exibir informações, resolver um problema, ou o que quer.)

  • Crie um NotLicensedActivity classe.

    Uma amostra NotLicensedActivity é copiado aqui.

    classe pública NotLicensedActivity estende Atividade {onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView public void (R.layout.not_licensed) -String mensagem = getIntent () getExtras () getString ( "mensagem") -.. (( TextView) findViewById (R.id.message_text)) setText (mensagem) -. ((TextView) findViewById (R.id.message_text2)) setText (mensagem) -.} public void quitApp (vista) {acabamento () -} }
  • Adicionar vistas de texto chamados message_text e message_text2 de arquivo de layout do seu NotLicensedActivity.

Na atividade principal, a essência da verificação de licença vem em duas partes (a) a chamada para doCheck (), que se comunica com o servidor do Google Play, e (b) a MyLicenseCheckerCallback classe interna (a classe que responde aos resultados do servidor Play). o LicenseCheckerCallback tem de ter pelo menos três métodos - um permitir() método para "Vá em frente e usar o aplicativo", uma dontAllow () método para "você não está licenciado para usar este aplicativo", e um erro de aplicação() método para "Oh, oh!"

No código de exemplo nada de especial é feita no permitir() método. No dontAllow () e erro de aplicação() métodos outra atividade é iniciada com o nome NotLicensedActivity. Você pode fazer isso NotLicensedActivity fazer o que quiser. Aconteça o que acontecer na NotLicensedActivity, uma continue campo é definido como falso, dizendo a principal atividade para chamar terminar() (no Resumindo método) quando voltar da NotLicensedActivity.

Você pode usar esse truque ou fazer algo diferente. No Android, atividades não são modal. Ou seja, se uma atividade cobre parcialmente uma outra atividade, então o usuário pode interagir com qualquer atividade ao tocar a parte apropriada da tela. Então se NotLicensedActivity não completamente encobrir a atividade principal, o usuário pode contornar a NotLicensedActivity tocando em outra parte da tela. Para evitar que isso aconteça, faça o NotLicensedActivity cobrir a tela inteira, resistindo à tentação de fazer a NotLicensedActivity olhar como uma pequena caixa de diálogo.

Testando o Licenciamento da App

Será que o seu licenciamento app funciona? Pode licenciado usuários executar seu aplicativo? E o que dizer de utilizadores não licenciados? eles podem executar seu aplicativo, também? Você pode descobrir depois de ter carregado a sua aplicação e antes de realmente publicar seu aplicativo. Veja como:

  1. Visita https://play.google.com/apps/publish/.

  2. Na parte muito mais à esquerda da página Console Developer, selecione Configurações.

    página Configurações da sua conta aparece.

  3. No lado esquerdo da página Configurações, selecione Detalhes da conta.

  4. Role a página Detalhes da conta até encontrar uma seção Teste de Licença.

    Nessa seção Teste de Licença, você encontrará um campo de texto chamado contas do Gmail com Acesso Testing. Você também vai encontrar uma lista drop-down Licença marcado Response Teste.

    Suas opções de resposta do teste License
    Suas opções de resposta do teste License
  5. Nas contas do Gmail com testes de campo Access, digite o endereço de e-mail para um ou mais contas do Gmail.

    Se você digitar mais de um endereço de e-mail, use uma vírgula para separar um endereço de outro. As pessoas cujos dispositivos Android estão registrados para esses endereços de e-mail será capaz de encontrar o seu aplicativo na loja do Google Play. (Outros não vai ver o seu app.)

  6. Na lista Response Teste Licenciado, selecione NOT_LICENSED.

    Os usuários que instalarem seus aplicativos (usuários com o Gmail endereços que você listou na Etapa 5) receberá esta resposta NOT_LICENSED quando eles tentam executar o aplicativo.

  7. Diga aos usuários em sua lista de contas do Gmail para tentar baixar e instalar o aplicativo.

    Se o código da sua aplicação está correta (por exemplo, se o onCreate método na atividade principal deste artigo está fazendo seu trabalho), o usuário de não ser capaz de continuar a executar seu aplicativo. Isso é exatamente o que você quer

  8. Quando estiver satisfeito com os resultados dos testes nas etapas 6 e 7, revisitar o Console desenvolvedor e alterar a resposta do teste Licenciado para licenciados.

  9. Diga aos usuários em suas contas do Gmail listar tentar executar o aplicativo novamente.

    Se o código da sua aplicação está correta (por exemplo, se o onCreate método na atividade principal deste artigo está fazendo seu trabalho), o usuário será capaz de continuar a executar seu aplicativo.

  10. Tente outras opções na lista Response Teste Licenciado - opções como LICENSED_OLD_KEY, ERROR_SERVER_FAILURE, e assim por diante.

    Lembre-se, não há tal coisa como demasiado testes.

menu