Neste guia, descrevemos como integrar as APIs de faturamento alternativo ao seu app.
Configuração da Biblioteca Play Faturamento
Adicione a dependência da Biblioteca Play Faturamento ao seu app Android. Para usar as APIs de faturamento alternativo, você precisa usar a versão 5.2 ou mais recente. Se precisar migrar de uma versão anterior, siga as instruções no guia de migração antes de tentar implementar um faturamento alternativo.
Conectar ao Google Play
As primeiras etapas do processo de integração são as mesmas descritas no Guia de integração do Google Play Faturamento, com algumas modificações ao inicializar o BillingClient:
- É necessário chamar um novo método para indicar que você quer oferecer ao usuário
várias opções de faturamento:
enableAlternativeBilling
. - É necessário registrar um
AlternativeBillingListener
para processar casos em que o usuário escolhe um método de faturamento alternativo.
O exemplo abaixo demonstra a inicialização de um BillingClient
com estas
modificações:
Kotlin
val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, purchases -> // Handle new Google Play purchase. } val alternativeBillingListener = AlternativeBillingListener { alternateChoiceDetails -> // Handle alternative billing choice. } var billingClient = BillingClient.newBuilder(context) .setListener(purchasesUpdatedListener) .enablePendingPurchases() .enableAlternativeBilling(alternativeBillingListener) .build()
Java
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) { // Handle new Google Play purchase. } }; private AlternativeBillingListener alternativeBillingListener = new AlternativeBillingListener() { @Override public void userSelectedAlternativeBilling( AlternativeChoiceDetails alternateChoiceDetails) { // Handle new Google Play purchase. } }; private BillingClient billingClient = BillingClient.newBuilder(context) .setListener(purchasesUpdatedListener) .enablePendingPurchases() .enableAlternativeBilling(alternativeBillingListener) .build();
Depois de inicializar o BillingClient
, você precisa
estabelecer uma conexão com o Google Play,
conforme descrito no guia de integração.
Mostrar produtos disponíveis
É possível mostrar produtos disponíveis para o usuário da mesma forma que para uma integração do sistema de faturamento do Google Play. Quando o usuário encontrar os produtos disponíveis e selecionar um para comprar, inicie o fluxo de escolha de faturamento do usuário, conforme descrito na próxima seção.
Iniciar o fluxo de escolha de faturamento do usuário
Inicie o fluxo de escolha de faturamento do usuário chamando launchBillingFlow()
. Isso funciona
da mesma forma que iniciar um fluxo de compra
com uma integração do sistema de faturamento do Google Play: você fornece uma instância de ProductDetails
e um offerToken
correspondente ao produto e à oferta
que o usuário quer adquirir. Se o usuário escolher o sistema de faturamento do Google Play, essas
informações serão usadas para continuar o fluxo de compra.
Quando os desenvolvedores chamam launchBillingFlow
, o sistema de faturamento do Google Play
segue esta lógica:
O sistema verifica se o país do Google Play do usuário é a Coreia do Sul. Em caso positivo, o Google Play vai verificar se o faturamento alternativo foi ativado com base na configuração de
BillingClient
.- Se o faturamento alternativo tiver sido ativado, o fluxo de compra vai mostrar a nova UX.
- Se o faturamento alternativo não estiver ativado, o fluxo de compra vai mostrar a UX padrão do sistema de faturamento do Google Play, sem escolha do usuário.
Se o país do Google Play do usuário não for a Coreia do Sul, o fluxo de compra mostrará a UX padrão do sistema de faturamento, sem escolha do usuário.
O país do Google Play do usuário é a Coreia do Sul | O país do Google Play do usuário não é a Coreia do Sul | |
---|---|---|
enableAlternativeBilling é chamado durante a configuração do BillingClient |
A nova UX aparece para o usuário | A UX padrão do sistema de faturamento do Google Play aparece para o usuário |
enableAlternativeBilling não é chamado durante a configuração do BillingClient |
A UX padrão do sistema de faturamento do Google Play aparece para o usuário | A UX padrão do sistema de faturamento do Google Play aparece para o usuário |
Processar a seleção do usuário
A forma como você lida com o restante do fluxo de compra varia dependendo do usuário ter selecionado o sistema de faturamento do Google Play ou um sistema alternativo de faturamento.
Quando o usuário seleciona um sistema alternativo de faturamento
Se o usuário escolher o sistema alternativo de faturamento, o Google Play vai chamar o
AlternativeBillingListener
para notificar o app de que ele precisa iniciar o
fluxo de compra nesse sistema. Mais especificamente, o
método userSelectedAlternativeBilling()
é chamado.
O token de transação externa fornecido no objeto
AlternativeChoiceDetails
representa uma assinatura para que o usuário escolha o fluxo
de faturamento alternativo. Use esse token para informar qualquer transação resultante
dessa opção, conforme explicado no guia de integração de
back-end.
O AlternativeBillingListener
precisa realizar as ações abaixo:
- Extrair os produtos que estão sendo comprados pelo usuário para que possam ser apresentados no fluxo de compra no sistema alternativo de faturamento.
- Coletar a string recebida como o token de transação externa e enviar ao back-end para armazenar o token. Ele será usado mais tarde para informar a transação externa ao Google Play se o usuário concluir essa compra específica.
- Iniciar o fluxo de compra alternativo do desenvolvedor.
Se o usuário concluir a compra usando o sistema alternativo de faturamento
do desenvolvedor, você precisará informar a transação ao Google Play chamando
a API Google Play Developer pelo back-end, fornecendo o externalTransactionToken
e outros detalhes da transação. Consulte o guia de integração
de back-end para mais detalhes.
O exemplo abaixo demonstra como implementar o
AlternativeBillingListener
:
Kotlin
private val alternativeBillingListener = AlternativeBillingListener { alternativeChoiceDetails -> // Get the products being purchased by the user. val products = alternativeChoiceDetails.products // Send external transaction token to developer backend server // this devBackend object is for demonstration purposes, // developers can implement this step however best fits their // app to backend communication. devBackend.sendExternalTransactionStarted( alternativeChoiceDetails.externalTransactionToken, user ) // Launch alternative billing // ... // The developer backend handles reporting the transaction // to Google Play's backend once the alternative billing // purchase is completed. }
Java
private AlternativeBillingListener alternativeBillingListener = new AlternativeBillingListener() { @Override public void userSelectedAlternativeBilling( AlternativeChoiceDetails alternateChoiceDetails) { // Get the products being purchased by the user. List<Product> products = alternativeChoiceDetails.getProducts(); // Send external transaction token to developer backend server // this devBackend object is for demonstration purposes, // developers can implement this step however best fits their // app to backend communication. devBackend.sendExternalTransactionStarted( alternateChoiceDetails.getExternalTransactionToken(), user ); // Launch alternative billing // ... // The developer backend handles reporting the transaction // to Google Play's backend once the alternative billing // purchase is completed. } };
Quando o usuário seleciona o sistema de faturamento do Google Play
Se o usuário escolher o sistema de faturamento do Google Play, ele vai continuar com o fluxo de compra.
- Consulte Como processar compras no guia de integração da biblioteca para mais informações sobre como processar novas compras no app usando o sistema de faturamento do Google Play.
- Consulte Novas assinaturas no guia de gerenciamento de assinatura para outras orientações sobre compras de assinaturas.
Processar mudanças na assinatura
Para desenvolvedores que usam um sistema alternativo de faturamento, as compras precisam ser
processadas pelo sistema do Google Play ou informadas com um
externalTransactionId
, dependendo da escolha do usuário. As mudanças
em assinaturas existentes que foram processadas pelo fluxo de escolha do usuário podem ser feitas
pelo mesmo sistema de faturamento até a expiração.
Esta seção descreve como lidar com alguns cenários comuns de mudança de assinatura.
Fluxos de upgrade e downgrade
Os fluxos de upgrade e downgrade precisam ser tratados de maneira diferente, dependendo da assinatura ter sido comprada originalmente pelo sistema de faturamento do Google Play ou por um sistema alternativo.
Assinaturas compradas usando um sistema alternativo de faturamento
Para assinaturas que foram compradas originalmente no sistema alternativo de faturamento do desenvolvedor após a escolha do usuário, aqueles que solicitarem um upgrade ou downgrade vão passar pelo mesmo sistema sem precisar passar pela experiência de escolha do usuário de novo.
Para fazer isso, chame launchBillingFlow
quando o usuário solicitar um upgrade ou
downgrade. Em vez de especificar um objeto SubscriptionUpdateParams
nos
parâmetros, use setOriginalExternalTransactionId
, fornecendo o
ID da transação externa para a compra original. Isso não mostra
a tela de escolha do usuário, já que a escolha original é
preservada para upgrades e downgrades. Nesse caso, a chamada para launchBillingFlow
gera
um novo token de transação externa, que
pode ser extraído do callback.
Kotlin
// The external transaction ID from the current // alternative billing subscription. val externalTransactionId = //... ; val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // Fetched via queryProductDetailsAsync. .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOriginalExternalTransactionId(externalTransactionId) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams) // When the user selects the alternative billing flow, // the AlternativeBillingListener is triggered.
Java
// The external transaction ID from the current // alternative billing subscription. String externalTransactionId = //... ; BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmutableList.of( ProductDetailsParams.newBuilder() // Fetched via queryProductDetailsAsync. .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOriginalExternalTransactionId(externalTransactionId) .build() ) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams); // When the user selects the alternative billing flow, // the AlternativeBillingListener is triggered.
Quando o upgrade ou downgrade for concluído no sistema alternativo de faturamento, você vai precisar informar uma nova transação usando o token de transação externa recebido na chamada anterior para a nova compra da assinatura.
Assinaturas compradas usando o sistema de faturamento do Google Play
Da mesma forma, é preciso mostrar o fluxo de upgrade ou downgrade no sistema de faturamento do Google Play aos usuários que compraram a assinatura atual pelo sistema de faturamento do Google Play após a escolha do usuário. As instruções abaixo descrevem como iniciar o fluxo de compra para um upgrade ou downgrade pelo sistema de faturamento do Google Play:
Identifique o
offerToken
da oferta selecionada para o novo plano:Kotlin
val offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken()
Java
String offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken();
Envie as informações corretas ao sistema de faturamento do Google Play para processar a nova compra, incluindo o token de compra da assinatura atual:
Kotlin
val billingFlowParams = BillingFlowParams.newBuilder().setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetailsNewPlan) .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(oldToken) .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .build() ) .build() BillingClient.launchBillingFlow(activity, billingFlowParams)
Java
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmutableList.of( ProductDetailsParams.newBuilder() // Fetched via queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken("old_purchase_token") .setReplaceProrationMode(ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .build() ) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Essa compra é realizada no sistema de faturamento do Google Play e o app
recebe a chamada PurchasesUpdatedListener.onPurchaseUpdated
com o resultado
da compra. Se a compra foi bem-sucedida, o método onPurchaseUpdated
também recebe as novas informações de compra e seu back-end recebe uma
Notificação do desenvolvedor em tempo real SUBSCRIPTION_PURCHASED
. Ao receber o
status da nova compra, um atributo linkedPurchaseToken
é vinculado à
compra da assinatura antiga para que você possa aposentá-la
conforme recomendado.
Cancelamentos e restaurações de assinaturas
Os usuários podem cancelar a assinatura quando quiserem. Quando um usuário cancela uma assinatura, a rescisão do direito pode ser adiada até o término do período pago. Por exemplo, se um usuário cancelar uma assinatura mensal na metade do mês, ele vai poder continuar acessando o serviço por aproximadamente duas semanas até perder o acesso. Durante esse período, a assinatura ainda está tecnicamente ativa, ou seja, o usuário pode usar o serviço.
Várias vezes os usuários decidem reverter o cancelamento durante esse período ativo. Neste guia, isso é chamado de restauração. As próximas seções descrevem como lidar com cenários de restauração na integração da API de faturamento alternativo.
Assinaturas compradas usando um sistema alternativo de faturamento
Se você tiver um ID de transação externa para uma assinatura cancelada, não
será necessário chamar o launchBillingFlow
para restaurar a assinatura. Ele não pode ser usado para esse tipo de ativação. Se o usuário restaurar a
assinatura enquanto ainda estiver no período ativo de uma assinatura cancelada, nenhuma
transação vai ocorrer nesse momento. Será possível continuar gerando relatórios sobre renovações quando
o ciclo atual expirar e a próxima renovação ocorrer. Isso inclui casos em que
o usuário recebe um crédito ou preço especial de renovação como parte da restauração
(por exemplo, uma promoção para incentivar o usuário a manter a assinatura).
Assinaturas compradas usando o sistema de faturamento do Google Play
Geralmente, os usuários podem restaurar assinaturas no sistema de faturamento do Google Play. Para
assinaturas canceladas que foram originalmente compradas no sistema de faturamento
do Google Play, o usuário pode desfazer o cancelamento enquanto a assinatura estiver
ativa usando o recurso
Renovar assinatura. Nesse caso,
você recebe uma Notificação do desenvolvedor em tempo real SUBSCRIPTION_RESTARTED
no
seu back-end e um novo token de compra não é emitido. O token original
é usado para manter a assinatura. Para saber como gerenciar a restauração no
sistema de faturamento do Google Play, consulte
Restaurações no guia
de gerenciamento de assinaturas.
Também é possível acionar uma restauração no sistema de faturamento do Google Play pelo app
chamando launchBillingFlow
. Consulte Antes da expiração da assinatura:
no app para conferir uma explicação sobre
como fazer isso. No caso de usuários que passaram pelo fluxo de escolha do usuário
para a compra original (que foi cancelada, mas ainda está ativa), o sistema
detecta automaticamente a escolha e mostra a interface do usuário para
restaurar essas compras. É preciso confirmar a recompra da
assinatura no Google Play, mas não é necessário passar pelo fluxo de
escolha do usuário de novo. Nesse caso, um novo token de compra é emitido para o
usuário. Seu back-end recebe uma Notificação do desenvolvedor em tempo
real de SUBSCRIPTION_PURCHASED
e o valor linkedPurchaseToken
do novo status de compra
é definido, como no caso de upgrade ou downgrade com o token da compra antiga
da assinatura que foi cancelada.
Renovações de assinatura
Se uma assinatura expirar completamente, seja por cancelamento ou pagamento recusado sem recuperação (uma suspensão de conta expirada), o usuário vai precisar renovar assinatura para recuperar o direito de acesso.
A renovação de uma assinatura também pode ser ativada pelo app, de forma semelhante a
uma assinatura padrão. Os usuários precisam ser capazes de escolher qual sistema de faturamento querem
usar. O launchBillingFlow
pode ser chamado nesse caso, conforme descrito em Iniciar
o fluxo de escolha de faturamento do usuário.
Próximas etapas
Depois de concluir a integração no app, estará tudo pronto para integrar seu back-end.