Vendendo Produtos e Inscrições Com Google In-App Billing no Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Vendendo Produtos e Inscrições Com Google In-App Billing no Android

Vendendo Produtos e Inscrições Com Google In-App Billing no Android

Vinícius Thiengo
(7800) (23)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloCraftsmanship Limpo: Disciplinas, Padrões e ética
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição
Ano2023
Páginas416
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa, blz?

Nesse vídeo mostro como implementar o In-APP Billing em nossas APPs Android para podermos utilizar a plataforma de pagamento do Google (a mesma utilizada para APPs pagas no Google Play Store) para processar as compras de produtos (o Google sinaliza que somente produtos digitais ou inscrições devem utilizar o In-APP Billing) e inscrições dentro de nossas APPs. A API é bem simples de integrar, é necessário ter já baixado o Google Play Billing Library pelo SDK Manager. O Google na documentação do In-app Billing deixa claro que a API deve ser utilizada para produtos digitais e que o Google somente fornece a descrição e alguns outros dados do produtos / inscrição e a APP é encarregada de fornecer o conteúdo referente a compra realizada.

Como comentado em vídeo, tive problemas para utilizar a versão alfa da APP como versão de teste, logo utilizei a versão de produção que passou sem problemas, depois apenas fiz o reembolso pela página do Google Wallet. É necessário que sua conta de desenvolvedor do Google Play Store esteja com a conta de Comerciante ativada (conta no Google Wallet) que por sinal é bem fácil também de ativar. Fique ligado quanto a configuração necessária no AndroidManifest.xml e com os arquivos que devem estar no projeto de sua, arquivos que devem ser obtidos do exemplo que vem junto ao Google Play Billing Library. No vídeo cometi alguns mistakes, mas um merece maior relevancia que é o uso do método correto para compra de produto e compra de inscrição, para compra de produto utilizamos o método launchPurchaseFlow() para compra de inscrição utilizamos o método launchSubscriptionPurchaseFlow(), ambos podem ter exatamente os mesmos parâmetros.

Apesar de a integração ser fácil e o controle na página do Google Wallet ser fácil também o Google fica com aproximadamente 30% do valor de compra realizado. Nesse caso você tem de pesar para ver se é jogo colocar o Billing em sua APP ou quebrar a cabeça com uma outra API de pagamento que cobre uma taxa menor. Então é isso, vou evitar mais delongas e deixar você assistir ao vídeo.

O link para download do projeto está logo abaixo no post.

Segue links de vídeos que podem lhe ajudar a complementar o conteúdo desse vídeo:

Assinando Uma APP Android e Publicando na Play Store

Application Class no Android, Entendendo e Utilizando

Segue link das páginas apresentadas no vídeo:

Página de start do Google In-app Billing no site do Android

Página de instalação do plugin do ADT no Eclipse

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Pacote Google Play Services Ads Para Anúncios no AndroidPacote Google Play Services Ads Para Anúncios no AndroidAndroid
Google Cloud Messaging (GCM) no AndroidGoogle Cloud Messaging (GCM) no AndroidAndroid
AutoCompleteTextView no Android, Entendendo e UtilizandoAutoCompleteTextView no Android, Entendendo e UtilizandoAndroid
AccountManager no Android, Entendendo e UtilizandoAccountManager no Android, Entendendo e UtilizandoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (23)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
02/10/2020
Ola Thiengo. Gostaria de colocar nos meus apps um metodo de assinaturas mensais, trimestrais, semestrais e anuais, sendo que, os apps que eu tenho ja estão com Admob configurado, dai queria colocar esse metodo para poder remover as publicidades e adicionar recursos extras. Você já fez os videos atualizados para 2020?
Responder
Vinícius Thiengo (0) (0)
16/10/2020
É Daniel, certo?

Tudo bem?

Sobre sua dúvida...

... neste caso, confesso que não tenho muita expertise.

Pois não trabalho com APIs de pagamentos mensais.

Porém sei que por se tratar de conteúdo digital (remover banners do app, por exemplo)...

... devido a isso, você tem que utilizar alguma das APIs de processamento de pagamentos do Google.

Agora, como dica, é destrinchar a Google Pay e assim descobrir se ela permite o pagamento de mensalidades: https://developers.google.com/pay/api?hl=pt

Digo a Google Pay API, pois se me lembro bem a In-App Billing não permite cobranças mensais automáticas.

Ou seja, você terá que fazer isso no código, junto com os dados em seu banco de dados remoto.

Seu código será responsável por verificar o vencimento do pagamento e assim realizar uma nova cobrança, utilizando o In-App Billing.

De qualquer forma, não deixe de ver também a API de pagamentos Android da Stripe: https://stripe.dev/stripe-android/stripe/

Entre em contato com eles e verifique se é possível colocar o pagamento mensal no app com a API deles sem ser banido da Google Play Store.

É isso.

Surgindo mais dúvidas, pode enviar.

E não deixe de entrar da Área de Membros do Blog: https://membros.thiengo.com.br/

Abraço.
Responder
Thyago (1) (0)
27/11/2020
Olá, in app billing permite assinaturas mensais e anuais também. Na questão das assinaturas, depois de 1 ano (contínuo) a porcentagem que eles descontam diminui. Agora para remover os anúncios é você que tem que implementar mesmo, você pode verificar o estado da assinatura (Se o usuário cancelou, ou se renovou) pra decidir se vai bloquear os anúncios ou voltar a exibi-los. O método usado segundo a documentação é esse BillingClient.queryPurchases(), eu só não entendi ainda como usar, se há como consultar à partir do App direto, no onCreate por exemplo, ou se é obrigatório ter um backend, achei confuso essa parte da documentação, não consegui consultar pelo App direto ainda...
Responder
Vinícius Thiengo (2) (0)
28/11/2020
Thyago, tudo bem?

Excelente comentário.

Obrigado pela contribuição.

Abraço.
Responder
Rodrigo Gomes Araújo (3) (0)
24/03/2018
Boa noite, gosto muito de seus vídeos. Tem como fazer um com o atual google play billing library?
Responder
Vinícius Thiengo (3) (0)
25/03/2018
Rodrigo, tudo bem?

Obrigado pela dica. Vou sim estar atualizando este conteúdo de pagamentos com o In-App Billing do Android.

Abraço.
Responder
Fabio Costa (2) (0)
23/09/2018
Olá Thiengo que video bom maravilha muito obrigado man.
Queria muito aplicar o conteúdo do vídeo mas com a nova library do billing ajuda a gente Thiengo faz um update do conteúdo com a nova versão. please please plase.


implementation 'com.android.billingclient:billing:1.1'
Responder
Jose Antonio (1) (0)
24/07/2017
alguem pode me ajudar por meu site em um aplicativo? eu so preciso de um aplicativo com uma unica interface e com o botao que redireciona para meu site, quero fazer esse app para usar o in-app billing para meus clientes fazer a assinatura no meu site, tenho varios clientes e nao estou conseguindo ter lucros exprssivos com outros sistemas de pagamentos direto  no site, esta me dando muita dor de cabeça ficar atualizando outros gateway de pagamentos.
Responder
Vinícius Thiengo (0) (0)
26/07/2017
Jose Antonio, tudo bem?

Caso queira o site abrindo dentro do aplicativo, sem um botão para isso, veja os dois artigos e vídeos dos links a seguir:

http://www.thiengo.com.br/webview-no-android-entendendo-e-utilizando
http://www.thiengo.com.br/facilitando-o-desenvolvimento-de-apps-android-com-a-biblioteca-androidutilcode

Caso queira somente ter um aplicativo com um Button que ao receber o clique abra o site no navegador do device, crie esses simples aplicativo utilizando o Button e um listener de click vinculado a ele e dentro desse listener de click coloque o código de abertura de site no navegador, como no link a seguir:

https://stackoverflow.com/a/3004542/2578331

Abraço.
Responder
Camilo (1) (0)
30/06/2017
Muito bom o video, bem explicado. Porém nao estou conseguindo implementar o mesmo via fragment, teria a possibilidade de postar um código similar pra fragment?

Valeu e parabéns pelo blog e iniciativas!!
Responder
Vinícius Thiengo (0) (0)
30/06/2017
Camilo, tudo bem?

Deveria ser simples o uso também no Fragment. Com o getActivity() você tem acesso ao mesmo contexto no Frag que quando trabalhando diretamente com Activity.

Qual problema está enfrentando? O que é apresentado nos logs do Android Studio assim que tenta o uso no Fragment?

Abraço.
Responder
Camilo (1) (0)
03/07/2017
Thiengo agradeço sua disponibilidade pra responder minha duvida.

Então, o fluxo do erro é o seguinte:

Clico em comprar -> Sobe o dialog da compra -> Clico fora pra escolher outro sem confirmar compra -> Escolho outro produto e dá o erro(ele minimiza o app e volta na tela inicial).

Ele diz que ja existe outra operação assíncrona, abaixo o erro:

java.lang.IllegalStateException: Can't start async operation (launchPurchaseFlow) because another async operation(launchPurchaseFlow) is in progress.
                                                       at com.cba.camiloavancini.mytestebilling.util.IabHelper.flagStartAsync(IabHelper.java:819)
                                                       at com.cba.camiloavancini.mytestebilling.util.IabHelper.launchPurchaseFlow(IabHelper.java:373)
                                                       at com.cba.camiloavancini.mytestebilling.util.IabHelper.launchPurchaseFlow(IabHelper.java:338)
                                                       at com.cba.camiloavancini.mytestebilling.FragmentLoja$4$4.onClick(FragmentLoja.java:164)
Responder
Vinícius Thiengo (0) (0)
04/07/2017
Camilo, estou olhando algumas discussões dentro de uma dúvida no StackOverflow similar a sua:

https://stackoverflow.com/questions/15575605/android-in-app-billing-cant-start-async-operation-because-another-async-operat/39564569

Apesar de a resposta do link a seguir ser marcada como a mais provável correta:

https://stackoverflow.com/a/20485213/2578331

Aparentemente a que pode solucionar seu problema é a resposta com o uso do método flagEndAsync(). Está utilizando ele?

https://stackoverflow.com/a/39564569/2578331

Veja se funciona para ti. Caso não, volte aqui que tentamos outra solução. Abraço.
Responder
Camilo (1) (0)
05/07/2017
E ae Thiengo blz?

Então no dia que eu postei o comentário eu consegui resolver, mas é isso mesmo que vc falou tem que mudar a função

void flagStartAsync(String operation)  que se encontra dentro do "IabHelper.java"

Dai eu acrescentei a linha:

if (mAsyncInProgress) {
            flagEndAsync();
        }

Dai funcionou de boa! Muito obrigado por sua ajuda, valeu msm!

Aproveitando a deixa tenho uma duvida meio noob, o buy(View view) ele não precisa ser chamado? No fragment funciona da mesma maneira? Eu to fazendo direto botão.setOnClickListener() dentro do startSetup, ta errado dessa forma?. To perguntando, pois não consigo comprar o produto mais de uma vez, mesmo seguindo seu tutorial, e talvez isso seja o problema.

Mais uma vez muito obrigado!!
Responder
Vinícius Thiengo (0) (0)
05/07/2017
Camilo, tudo bom aqui.

Confesso que não tenho expertise com a In-App Billing, que é muito útil para aplicativos que vendem acesso a partes restritas dele.

Mas se me lembro bem você não consegue prosseguir com a compra do mesmo item? teria de verificar melhor na API se isso é possível.

De qualquer forma, caso você realmente esteja vendendo produtos, mesmo que digitais, recomendo que utilize um checkout transparente como faço no conteúdo do link a seguir: http://www.thiengo.com.br/checkout-transparente-da-web-no-android

Até a taxa paga por produto vendido é muito inferior aos 30% do In-App Billing. Veja se esse meio de vendas serve ao seu projeto. Abraço.
Responder
26/04/2017
Alguém sabe explicar como é feita a taxação em cima da venda?
Responder
Vinícius Thiengo (0) (0)
26/04/2017
Magno, tudo bem?

Até a época da construção do vídeo acima a taxa era de 30%, mas esse valor era cobrado para o pagamento de taxas do Google ao governo e a fornecedores. Ou seja, não se tornava lucro da empresa.

O valor disponibilizado a ti já é o valor com o desconto de 30%.

Abraço.
Responder
27/04/2017
Entendi, muita coisa. Talvez compense usar algum gateway de pagamento de terceiros tipo o Moip.
Responder
Vinícius Thiengo (0) (0)
27/04/2017
Magno, sim. Devido a isso a pouco tempo atrás fiz um artigo / vídeo mostrando como trabalhar com uma API de checkout transparente Web em aplicativos Android.

A implementação é simples, mesmo exigindo um pouco de codificação com tecnologia Web. Segue link: http://www.thiengo.com.br/checkout-transparente-da-web-no-android

No projeto eu utilizei a API do pagar.me, mas é completamente possível o uso da API do Moip. Abraço.
Responder
10/05/2016
Fala Thiengo blz? parabens pelo post, fiquei com uma dúvida, então pra poder usar eu vou precisar ter um web service no app pra poder ficar guardando o TOKEN das transações? como o TOKEN não é obrigatório, vc acha q não utilizando ele pode ter problemas futuros q não possa ser resolvido? agradeço o espaço...
Responder
Vinícius Thiengo (1) (0)
12/05/2016
Fala Edriano, blz?
Acredito que não há problemas em não salvá-lo, pois no dashboard do Google fica tudo salvo e token faz lembrar chave temporária. Abraço
Responder
Daniel (1) (0)
04/01/2016
Thiengo, tu já recebeu os pagamentos via Wallet ou conhece alguém que já recebeu os pagamentos do mesmo ?
Procurei na internet e não vi ninguém dizer se recebeu ou não..se precisa de conta corrente ou outro tipo de conta..Tu sabe me informar a data que o Wallet deposita o dinheiro para o banco ? e precisa de algum pin pra confirmar a conta do wallet ? Porque ao meu ver é tão fácil, vendeu e já vai pro wallet..
Responder
Vinícius Thiengo (0) (0)
06/01/2016
Daniel, blz?
Utilizar o Wallet tb é novidade para mim, mas ele não deve fugir mt do que é o AdSense / AdMob não, antes de obter a grana, provavelmente vc terá de aguardar uma carta do Google chegar em sua casa e então utilizar o código no site para liberar o recebimento do dinheiro em sua conta. Terá de ver mais na doc dele. Abraço
Responder