In-app Billing v3 (Compras dentro do aplicativo)

7

Já pensou em vender algo dentro do seu Aplicativo ?

Pensando nisso o Google criou uma API que nos possibilita realizar esta operação de forma simples e iremos aprender aqui como implementar essa API criando um projeto novo.

Neste exemplo, vamos criar um App onde a pessoa poderá doar valores preestabelecidos.

Pré-requisito

  • Ter o Android Studio e Android SDK instalado
  • Efetuar o Download do Google Play Billing Library (utilizando o Android SDK Manager)
  • Ter uma conta de desenvolvedor no Google Google Publish.

1. Verificar se Google Play Billing Library está instalada

No Android Studio, após criar um novo projeto, clique na barra superior em Tools -> Android -> SDK Manager e clique na aba SDK Tools. Verifique se a opção Google Play Billing Library. rev x está habilitada, caso não esteja, habilite e clique no botão OK.

Captura de tela de 2016-05-11 15:08:15
2. Importar o arquivo IInAppBillingService.aidl para seu projeto

Verifique onde esta instalado o SDK do Android Tools -> Android -> SDK Manager, verifique o caminho em Android SDK Location:. Abra a pasta do SDK e encontre o arquivo IInAppBillingService.aidl dentro das subpastas extras/google/play_billing.

Voltando ao Android Studio, clique com o botão direito sobre a pasta main e crie uma nova pasta (New -> Directory) com o nome aidl e após criar a pasta clique sobre ela e crie um novo pacote (New -> Package) com o nome com.android.vending.billing. Feito isso agora vamos importar o arquivo IInAppBillingService.aidl para dentro do pacote criado.

Faça o download do arquivo aqui

3. Adicionando Permissão para utilizar In App Billing

Abra o arquivo AndroidManifest.xml e adicione a linha < uses-permission android:name="com.android.vending.BILLING" />.

4. Publicar o App

Após configurar o app, vamos publicá-lo em modo Beta, assim podemos testá-lo sem deixar aberto ao público.

5. Criar produtos

Após publicar o app, vamos criar os produtos que serão vendidos, neste exemplo vamos criar 2 (dois) produtos, um será uma venda única e o outro será para doações (onde será permitido doar mais de uma vez).

Clique em Produtos integrados ao app e adicione um novo produto. Existem duas formas de produtos: Produto gerenciado para pagamento único ou Assinatura para paramentos periódicos (semanal, mensal, anual…). Em nosso exemplo vamos utilizar a opção Produto gerenciado. Dê um nome para este produto e adicione valor e descrição. Em nosso exemplo vamos utilizar o nome sku_01 e sku_02.

6. Mão na massa

Este tutorial foi baseado no exemplo do Google chamado Trivial Driver, que pode ser adquirido aqui.

Para ganharmos tempo disponibilizarei alguns arquivos (classes) necessários para a conclusão do tutorial. Clique aqui para baixar as classes.

Pronto, agora que temos todos os arquivos em mãos, vamos criar um novo projeto Android e em seguida criar uma variável com a chave de licença do App.

No Google Console clique em Serviços e APIs e crie uma variável (String) com o nome base64EncodedPublicKey.

Agora que configuramos a chave de licença do App, precisamos criar a comunicação para obter o serviço do Google e para isso iremos utilizar a classe IabHelper.

Agora que criamos a conexão é necessário iniciar a configuração passando um Listener para nos avisar quando essa configuração estiver concluída. Ao concluir a configuração, vamos pedir detalhes dos nossos produtos (SKUs).

O Listener fica da seguinte forma

OBSERVAÇÃO IMPORTANTE

Não se esqueça de fazer o dispose no objeto mHelper e excluir o registro do Broadcast Receiver no método onDestroy()

Agora que já temos a comunicação com o serviço vamos testar uma compra adicionando uma ação nos botões para simular uma compra. Ao clicar no botão vamos iniciar o processo de compra através do método launchPurchaseFlow passando um Listener para obter o retorno.

No retorno verificamos se a compra foi concluída, lembrando que se quisermos obter dados da compra, basta analisar o objeto Purchase.

Note que há um trecho do código que esta comentado, esse trecho refere-se a disponibilidade de se comprar o mesmo item mais de uma vez.

Se optar por liberar a compra mais de uma vez, é necessário implementar o Listener abaixo

7. Código completo

activity_main.xml

MainActivity.java

Qualquer dúvida ou problema fique a vontade para deixar um comentário abaixo.

REFERÊNCIAS
In-app Billing
Código Fonte Completo

Share.

About Author

gorio

Engenheiro de Computação, com 6 anos de experiência e vivência no mundo de Sistemas Embarcados e Mobile.

7 Comentários

  1. Parabens pelo tutorial, simples, direto e bem explicado, tenho uma dúvida, se caso meu produto for remover propagandas admob, seria melhor eu salvar algo dizendo que aquele usuário fez a compra em sqlite ou sharedPreferences pra poder sempre verificar e setar View.Gone no anúncio?

    Ou ao invés de precisar salvar algo, a transação fica registrada no google e eu posso verificar diretamente pelo if (inventory.hasPurchase(SKU_ONE)) ?

    • gorio

      Bom dia Edriano,

      Muito boa sua pergunta. Para tentar lhe ajudar vamos entender alguns pontos. O AdMob necessita de conexão com a internet para que possa ser exibido e para realizar a consulta do registro da compra no Google você também precisa estar conectado, ou seja, fica a seu critério a decisão de salvar localmente se o usuário já efetuou tal compra. Eu particularmente salvaria localmente, pois evitaria ter que fazer uma consulta toda vez que o usuário abrisse o App, deixando para realizar essa consulta apenas na primeira vez que o mesmo abrisse o App após a instalação do mesmo.

  2. Olá, antes de mais nada gostaria de parabenizar pelo tutorial.

    Segui todos os passo do tutorial, mas estou tendo dificuldade em um aspecto. Se o usuário desinstalar o aplicativo no qual ele comprou uma licença premium (vamos dizer assim) e voltar a instalar novamente o aplicativo não consigo fazer, por meio do exemplo dado nesse tutorial, com que haja uma verificação se o usuário já fez a compra desse item e, consequentemente, impeça que ele compra novamente o item, ou ainda, que as propagandas sem impedidas de serem exibidas.

    Será que você poderia dar uma orientação quanto a isso?

Leave A Reply

*