Este tópico contém notas da versão da Biblioteca Google Play Faturamento.
Biblioteca Google Play Faturamento versão 7.0.0 (14-05-2024)
A versão 7.0.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível disponíveis.
Resumo das mudanças
Foram adicionadas APIs para oferecer suporte a assinaturas de parcelas.
ProductDetails.InstallmentPlanDetails
adicionado dos planos básicos de parcelamento que os usuários estão qualificados para comprar. Esta API ajuda o app a identificar o plano de parcelamento e a configuração de compromisso para fornecer informações relacionadas ao usuário. Para saber mais, consulte nossa guia de parcelas da assinatura.
PendingPurchasesParams
adicionado eBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
para substituirBillingClient.Builder.enablePendingPurchases()
, que foi descontinuado nesta versão.- O
enablePendingPurchases()
descontinuado é funcionalmente equivalente aenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
.
- O
Foram adicionadas APIs para oferecer suporte a transações pendentes para planos pré-pagos de assinatura:
- Usar
PendingPurchasesParams.Builder.enablePrepaidPlans()
junto comBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
para ativar transações pendentes para planos pré-pagos de assinatura. Ao adicionar verifique se o app também gerencia corretamente as assinaturas os ciclos de vida de ML. Para saber mais, consulte nossa guia de compras pendentes. Purchase.PendingPurchaseUpdate
adicionado ePurchase.getPendingPurchaseUpdate()
para recuperar a recarga pendente, o upgrade ou o downgrade para uma assinatura.
- Usar
BillingClient.Builder.enableAlternativeBilling()
removido,AlternativeBillingListener
, eAlternativeChoiceDetails
.- Os desenvolvedores devem usar
BillingClient.Builder.enableUserChoiceBilling()
comUserChoiceBillingListener
eUserChoiceDetails
no retorno de chamada do listener.
- Os desenvolvedores devem usar
BillingFlowParams.ProrationMode
removido,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
, eBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.- Os desenvolvedores devem usar
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
comBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
como alternativa. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Os desenvolvedores devem usar
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
removido.- Os desenvolvedores precisam usar o
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
. como alternativa.
- Os desenvolvedores precisam usar o
BillingClient.queryPurchaseHistoryAsync()
foi descontinuado e será removido em uma versão futura. Os desenvolvedores precisam use as seguintes alternativas:- Compras confirmadas e pendentes: usar
BillingClient.queryPurchasesAsync()
para buscar as compras ativas. - Compras consumidas: os desenvolvedores devem acompanhar as compras consumidas no os próprios servidores.
- Compras canceladas: use o void-purchases API de desenvolvedor.
- Para mais detalhes, consulte Consultar o histórico de compras
- Compras confirmadas e pendentes: usar
BillingFlowParams.ProductDetailsParams.setOfferToken()
agora gera uma exceção quando os desenvolvedores especificam umofferToken
vazio.minSdkVersion
foi atualizado para 21 etargetSdkVersion
para 34.
Biblioteca Google Play Faturamento versão 6.2.1 (16-04-2024)
A versão 6.2.1 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível disponíveis.
Resumo das mudanças
- Correção de um bug em
BillingClient.showAlternativeBillingOnlyInformationDialog()
, em queAlternativeBillingOnlyInformationDialogListener
não podia ser chamado em determinados casos quando a caixa de diálogo era concluída.
Biblioteca Google Play Faturamento versão 6.2.0 (06-03-2024)
A versão 6.2.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível disponíveis.
Resumo das mudanças
- Foram adicionadas APIs para dar suporte a ofertas externas.
BillingClient.Builder.enableExternalOffer()
adicionado para ativar a capacidade de fornecer promoções externas.BillingClient.isExternalOfferAvailableAsync()
adicionado para verificar a disponibilidade do recurso de promoções externas.BillingClient.showExternalOfferInformationDialog()
adicionado para mostrar uma caixa de diálogo de informações aos usuários antes de direcionar os usuários para fora do app.BillingClient.createExternalOfferReportingDetailsAsync()
foi adicionado para criar um payload necessário para informar transações feitas por promoções externas.
Biblioteca Google Play Faturamento versão 6.1.0 (14-11-2023)
A versão 6.1.0 da biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
- Foram adicionadas APIs para oferecer suporte ao faturamento alternativo exclusivo (sem escolha do usuário).
BillingClient.Builder.enableAlternativeBillingOnly()
foi adicionado para ativar a capacidade de oferecer apenas o faturamento alternativo.BillingClient.isAlternativeBillingOnlyAvailableAsync()
foi adicionado para conferir a disponibilidade de oferecer apenas o faturamento alternativo.BillingClient.showAlternativeBillingOnlyInformationDialog()
foi adicionado para mostrar uma caixa de diálogo de informações que informa aos usuários quando apenas o faturamento alternativo está sendo usado.BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
foi adicionado para criar um payload necessário para relatar transações feitas apenas por faturamento alternativo.
- As APIs de escolha de faturamento do usuário foram atualizadas.
UserChoiceBillingListener
foi adicionado para substituir o AlternativeBillingListener, que foi marcado como descontinuado.UserChoiceDetails
foi adicionado para substituirAlternativeChoiceDetails
, que foi marcado como descontinuado.BillingClient.Builder.enableUserChoiceBilling()
foi adicionado para substituirBillingClient.Builder.enableAlternativeBilling()
, que foi marcado como descontinuado.
BillingClient.getBillingConfigAsync()
foi adicionado para extrair o país do Google Play.
Biblioteca Google Play Faturamento versão 6.0.1 (22-06-2023)
A versão 6.0.1 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
A Biblioteca Play Faturamento foi atualizada para oferecer compatibilidade com o Android 14.
Biblioteca Google Play Faturamento versão 6.0 (10-05-2023)
A versão 6.0.0 da biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
Foi adicionado um novo tipo enumerado
ReplacementMode
para substituirProrationMode
.Observe que
ProrationMode
ainda está disponível por motivos de compatibilidade com versões anteriores.O código do pedido foi removido para compras
PENDING
.Anteriormente, o código do pedido era sempre criado, mesmo que a compra estivesse pendente. A partir da versão 6.0.0, o código de um pedido não será criado para compras pendentes. Nesses casos, ele será preenchido depois que a compra for movida para o estado
PURCHASED
.Os métodos
queryPurchases
elaunchPriceConfirmationFlow
foram removidos.Os métodos
queryPurchases
elaunchPriceConfirmationFlow
, marcados como descontinuados, foram removidos da Biblioteca Play Faturamento 6.0.0. Os desenvolvedores precisarão usarqueryPurchasesAsync
em vez dequeryPurchases
. Para alternativas aolaunchPriceConfirmationFlow
, consulte Mudanças no preço.Foi adicionado um novo código de resposta de erro de rede.
Um novo código de resposta de erro de rede,
NETWORK_ERROR
, foi adicionado a partir da versão 6.0.0 da Biblioteca Play Faturamento. Esse código é retornado quando um erro ocorre devido a um problema na conexão de rede. Esses erros de conexão de rede foram relatados anteriormente comoSERVICE_UNAVAILABLE
.SERVICE_UNAVAILABLE
eSERVICE_TIMEOUT
foram atualizados.A partir da versão 6.0.0 da Biblioteca Play Faturamento, os erros devido ao tempo limite no processamento serão retornados como
SERVICE_UNAVAILABLE
em vez do atualSERVICE_TIMEOUT
.Esse comportamento não mudará nas versões anteriores da biblioteca.
SERVICE_TIMEOUT
foi removido.A partir da versão 6.0.0 da Biblioteca Play Faturamento,
SERVICE_TIMEOUT
não será mais retornado. As versões anteriores ainda retornarão esse código.Foram adicionados mais registros.
A versão 6 da Biblioteca Play Faturamento inclui novos registros. Eles fornecem insights sobre o uso da API, como sucesso e falha, e sobre problemas de conexão de serviço. Essas informações serão usadas para melhorar o desempenho da Biblioteca Play Faturamento e oferecer melhor suporte a erros.
Biblioteca Google Play Faturamento versão 5.2.1 (22-06-2023)
A versão 5.2.1 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
A Biblioteca Play Faturamento foi atualizada para oferecer compatibilidade com o Android 14.
Biblioteca Google Play Faturamento versão 5.2 (06-04-2023)
A versão 5.2.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
- Foram adicionadas classes para oferecer suporte a fluxos de faturamento alternativo em dispositivos móveis/tablets para usuários na Coreia do Sul:
- Foi adicionado o método
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
para especificar o ID da transação externa da assinatura de origem. - Foi adicionado o método
BillingClient.Builder.enableAlternativeBilling()
para permitir que os usuários na Coreia do Sul selecionem uma opção de faturamento alternativo.
Biblioteca Google Play Faturamento versão 5.2 (31-10-2022)
A versão 5.1.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Essa versão contém as mudanças abaixo.
Resumo das mudanças
- O método
ProductDetails.SubscriptionOfferDetails.getOfferId()
foi adicionado para extrair o ID da oferta. - O método
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
foi adicionado para extrair o ID do plano básico. - A
targetSdkVersion
foi atualizada para 31.
Biblioteca Google Play Faturamento versão 5.0 (11-05-2022)
A versão 5.0.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Essa versão contém as mudanças abaixo.
Resumo das mudanças
- Introdução de um novo modelo de assinaturas, incluindo novas entidades que permitem criar várias ofertas para um único produto por assinatura. Para ver mais informações, consulte o guia de migração.
BillingClient.queryProductDetailsAsync()
foi adicionado para substituirBillingClient.querySkuDetailsAsync()
.- Adição do método
setIsOfferPersonalized()
para requisitos de divulgação de preços personalizados da UE. Para saber mais sobre como usar esse método, consulte Indicar um preço personalizado. - Remoção de
queryPurchases()
, que havia sido descontinuado e substituído por queryPurchasesAsync, introduzido na Biblioteca Google Play Faturamento 4.0.0. launchPriceChangeFlow
foi descontinuado e vai ser removido em uma versão futura. Para saber mais sobre possíveis alternativas, consulte Iniciar um fluxo de confirmação de mudança de preço.- Remoção de
setVrPurchaseFlow()
, que era usado anteriormente ao instanciar um fluxo de compra. Nas versões anteriores, esse método redirecionava o usuário para concluir a compra no dispositivo Android. Com a remoção desse método, os usuários concluem a compra pelo fluxo de compra padrão.
Biblioteca Google Play Faturamento versão 4.1 (23-02-2022)
A versão 4.1.0 da Biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Essa versão contém as mudanças abaixo.
Resumo das mudanças
- O método
BillingClient.showInAppMessages()
foi adicionado para ajudar a lidar com recusas de pagamento da assinatura. Para saber mais sobre como usar mensagens no app para lidar com recusas de pagamento de assinaturas, consulte Gerenciar recusas de pagamento.
Biblioteca Google Play Faturamento versão 4.0 (18-05-2021)
A versão 4.0.0 da biblioteca Google Play Faturamento e das extensões Kotlin já está disponível.
Resumo das mudanças
BillingClient.queryPurchasesAsync()
foi adicionado para substituirBillingClient.queryPurchases()
, que será removido em uma versão futura.O novo modo de substituição de assinatura
IMMEDIATE_AND_CHARGE_FULL_PRICE
foi adicionado.O método
BillingClient.getConnectionState()
para recuperar o estado da conexão da biblioteca Play Faturamento foi adicionado.Atualização do Javadoc e da implementação para indicar em qual linha de execução um método pode ser chamado e quais resultados de linha de execução são postados.
O
BillingFlowParams.Builder.setSubscriptionUpdateParams()
foi adicionado como uma nova maneira de iniciar atualizações de assinaturas. Isso substituiBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
eBillingFlowParams.Builder#setOldSku
, que foram removidos.Purchase.getQuantity()
ePurchaseHistoryRecord.getQuantity()
foram adicionados.Purchase#getSkus()
ePurchaseHistoryRecord#getSkus()
foram adicionados. Eles substituemPurchase#getSku
ePurchaseHistoryRecord#getSku
, que foram removidos.BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
, eBillingFlowParams#getSkuType
foram removidos.
Biblioteca Google Play Faturamento versão 3.0.3 (12-03-2021)
A versão 3.0.3 da Biblioteca Google Play Faturamento, a extensão do Kotlin e o plug-in do Unity já estão disponíveis.
Correções de bugs do Java e do Kotlin
- O vazamento de memória quando
endConnection()
é chamado foi corrigido. - Corrigido o problema que ocorre quando a Biblioteca Google Play Faturamento é usada por apps que utilizam
o modo de inicialização de tarefa única. Um callback
onPurchasesUpdated()
será acionado quando um app for retomado da tela de início do Android e a caixa de diálogo de faturamento estiver visível antes de ser suspensa.
Correções de bugs do Unity
- Atualize para a versão 3.0.3 do Java para corrigir o vazamento de memória e resolver problemas que impediam compras quando um app era retomado da tela de início do Android e a caixa de diálogo de faturamento ficava visível antes da suspensão do app.
Versão 3.0.2 da Biblioteca Google Play Faturamento (24-11-2020)
A versão 3.0.2 da Biblioteca Google Play Faturamento e da extensão Kotlin já está disponível.
Correções de bugs
- Correção de um bug na extensão Kotlin, em que a corrotina falhava com o erro "Já retomado".
- Correção de referências não resolvidas quando a extensão Kotlin é usada com a Biblioteca kotlinx.coroutines versão 1.4 ou mais recente.
Versão 3.0.1 da Biblioteca Google Play Faturamento (30-09-2020)
A versão 3.0.1 da biblioteca do Google Play Faturamento e da extensão Kotlin já está disponível.
Correções de bugs
- Correção de um bug em que, se o aplicativo fosse interrompido e restaurado durante o fluxo de faturamento,
PurchasesUpdatedListener
não poderia ser chamado com o resultado da compra.
Biblioteca do Google Play Faturamento versão 3.0 (08-06-2020)
A versão 3.0.0 da Biblioteca do Google Play Faturamento, a extensão do Kotlin e o plug-in do Unity já estão disponíveis.
Resumo das mudanças
- Remoção do suporte a SKU de recompensa.
- Remoção dos parâmetros
ChildDirected
eUnderAgeOfConsent
. - Remoção dos métodos descontinuados de payload do desenvolvedor.
- Remoção dos métodos descontinuados
BillingFlowParams.setAccountId()
eBillingFlowParams.setDeveloperId()
. - Remoção dos métodos descontinuados
BillingFlowParams.setOldSkus(String oldSku)
eBillingFlowParams.addOldSku(String oldSku)
. - Adição de anotações de nulidade.
Correções de bugs
SkuDetails.getIntroductoryPriceCycles()
agora retornaint
em vez deString
.- Correção de um bug em que o fluxo de faturamento era tratado como tendo parâmetros extras, mesmo que nenhum estivesse definido.
Biblioteca Google Play Faturamento versão 2.2.1 (20-05-2020)
A versão 2.2.1 da Biblioteca do Google Play Faturamento está disponível.
Correções de bugs
- Atualização da versão padrão da Biblioteca Play Faturamento Java da qual a extensão Kotlin depende.
Biblioteca Google Play Faturamento versão 2.2.0 e suporte a Unity (23-03-2020)
A versão 2.2.0 da Google Play Faturamento oferece funcionalidades que ajudam os desenvolvedores a garantir que as compras sejam atribuídas ao usuário correto. Essas mudanças substituem a necessidade de criar soluções personalizadas com base no payload do desenvolvedor. Como parte dessa atualização, a funcionalidade de payload do desenvolvedor se tornou descontinuada e será removida em uma versão futura. Para ver mais informações, incluindo alternativas recomendadas, consulte Payload do desenvolvedor.
Biblioteca do Google Play Faturamento 2 para Unity
Além das versões atuais em Java e Kotlin da biblioteca do Google Play Faturamento 2, lançamos uma versão da biblioteca para uso com Unity. Desenvolvedores de jogos que usam a API de compra no app do Unity podem fazer upgrade agora para aproveitar todos os recursos da Biblioteca Google Play Faturamento 2 e facilitar os upgrades subsequentes para versões futuras da biblioteca.
Para saber mais, consulte Usar o Google Play Faturamento com o Unity.
Resumo das mudanças
- Biblioteca Google Play Faturamento para Java
- Em
AcknowledgePurchaseParams
, os métodossetDeveloperPayload()
egetDeveloperPayload()
foram descontinuados. - Em
ConsumeParams
, os métodossetDeveloperPayload()
egetDeveloperPayload()
foram descontinuados. - Em
BillingFlowParams
,setAccountId()
foi renomeado comosetObfuscatedAccountId()
, e foram documentadas a restrição de tamanho de 64 caracteres e a restrição impedindo informações de identificação pessoal (PII) nesse campo.setAccountId()
foi marcado como descontinuado e será removido em uma versão futura da biblioteca. - Em
BillingFlowParams
,setObfuscatedProfileId()
foi adicionado e funciona de maneira semelhante asetObfuscatedAccountId()
. Para ver mais informações, consulte Atualizações e alternativas de payload do desenvolvedor. - Em
Purchase
, o métodogetAccountIdentifiers()
foi adicionado para retornar os identificadores de conta ofuscados definidos emBillingFlowParams
. - Em
BillingClient
, o métodoloadRewardedSku()
foi marcado como descontinuado, como parte da suspensão de uso de SKUs oferecidos como prêmio. Veja mais informações sobre a suspensão de uso na Central de Ajuda do Play Console.
- Em
Versão 2.1.0 da Biblioteca Google Play Faturamento e da extensão Kotlin (10-12-2019)
A versão 2.1.0 da Biblioteca Google Play Faturamento e a nova extensão Kotlin já estão disponíveis. A extensão Kotlin da Biblioteca do Play Faturamento fornece alternativas de API idiomáticas para o consumo do Kotlin, com segurança nula e corrotinas melhores. Para exemplos de código, consulte Usar a Biblioteca Google Play Faturamento.
Essa versão contém as mudanças abaixo.
Resumo das mudanças
- Em
BillingFlowParams
, houve a decontinuação do uso desetOldSku(String oldSku)
, que foi substituído porsetOldSku(String oldSku, String purchaseToken)
para desambiguação quando várias contas no dispositivo têm o mesmo SKU.
Biblioteca do Google Play Faturamento versão 2.0.3 (05-08-2019)
A versão 2.0.3 da biblioteca do Google Play Faturamento está disponível.
Correções de bugs
- Correção de um bug em que o
querySkuDetailsAsync()
falhava ocasionalmente com o códigoDEVELOPER_ERROR
em vez de retornar um resultado bem-sucedido.
Biblioteca Google Play Faturamento versão 2.0.2 (08-07-2019)
A versão 2.0.2 da biblioteca do Google Play Faturamento está disponível. Essa versão contém atualizações da documentação de referência e não altera a funcionalidade da biblioteca.
Biblioteca do Google Play Faturamento versão 2.0.1 (06-06-2019)
A versão 2.0.1 da biblioteca do Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Correções de bugs
- Correção de um bug em que as mensagens de depuração estavam sendo retornadas como
null
em alguns casos. - Correção de um possível problema de vazamento de memória.
Biblioteca Google Play Faturamento versão 2.0 (07-05-2019)
A versão 2.0 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
As compras precisam ser confirmadas em até três dias
O Google Play é compatível com a compra de produtos dentro ou fora do seu app. Para que o Google Play garanta uma
experiência de compras consistente, independente de onde o usuário compra o
produto, você precisa confirmar todas as compras recebidas pela Biblioteca Google Play
Faturamento assim que possível depois de conceder a titularidade ao usuário. Se você não confirmar uma compra em até três dias, o usuário receberá um reembolso automaticamente, e o Google Play revogará a compra. Para transações pendentes (função nova da versão 2.0), o prazo de três dias começa a ser contado quando a compra é movida para o estado PURCHASED
, e não se aplica enquanto a compra está no estado PENDING
.
Para assinaturas, você precisa confirmar compras que tiverem um novo token de compra. Isso quer dizer que todas as compras iniciais, mudanças de plano e novas assinaturas precisam ser confirmadas, mas você não precisa confirmar as renovações subsequentes. Para determinar se uma compra precisa ser confirmada ou não, você pode verificar o campo de confirmação na compra.
O objeto Purchase
agora inclui um
método isAcknowledged()
,
que indica se uma compra foi confirmada. Além disso, a API Google Play Developer inclui valores booleanos de confirmação para Purchases.products
e Purchases.subscriptions
.
Antes de confirmar uma compra, use esses métodos para determinar se ela já foi confirmada.
É possível confirmar uma compra usando um dos seguintes métodos:
- Para produtos consumíveis, use
consumeAsync()
, localizado na API do cliente. - Para produtos não consumíveis, use
acknowledgePurchase()
, localizado na API do cliente. - Um novo método
acknowledge()
também está disponível na API do servidor.
BillingFlowParams.setSku() foi removido
O método BillingFlowParams#setSku()
anteriormente descontinuado foi removido
nesta versão. Antes de renderizar produtos em um fluxo de compras, agora é necessário chamar BillingClient.querySkuDetailsAsync()
, transmitindo o objeto SkuDetails
resultante para BillingFlowParams.Builder.setSkuDetails()
.
Para exemplos de código, consulte Usar a Biblioteca Google Play Faturamento.
O payload do desenvolvedor é compatível
A versão 2.0 da Biblioteca Google Play Faturamento adiciona suporte ao payload do desenvolvedor (strings arbitrárias que podem ser anexadas a compras). É possível anexar um payload do desenvolvedor a uma compra, mas apenas quando a compra é confirmada ou consumida. É diferente do payload do desenvolvedor em AIDL, em que o payload podia ser especificado no lançamento de um fluxo de compra. Como as compras agora podem ser iniciadas fora do seu app, essa mudança garante que você tenha sempre uma oportunidade de adicionar um payload a elas.
Para acessar o payload na nova biblioteca, os objetos Purchase
agora incluem um
método
getDeveloperPayload()
.
Ofertas consistentes
Agora, quando você oferece um SKU com desconto, o Google Play retorna o preço original dele para que você possa mostrar aos usuários que eles estão recebendo um desconto.
SkuDetails
contém dois
novos métodos para recuperar o preço do SKU original:
getOriginalPriceAmountMicros()
: retorna o preço original não formatado do SKU antes do desconto.getOriginalPrice()
: retorna o preço original com formatação extra de unidade monetária.
Transações pendentes
Com a versão 2.0 da Biblioteca Google Play Faturamento, você precisa oferecer suporte a compras quando mais ações forem necessárias antes de conceder a titularidade. Por exemplo, um usuário pode escolher comprar seu produto em uma loja física com dinheiro. Isso significa que a transação é concluída fora do seu app. Em casos como esse, você precisa conceder a titularidade somente após o usuário ter concluído a transação.
Para ativar compras pendentes, chame
enablePendingPurchases()
como parte da inicialização do app.
Use Purchase.getPurchaseState()
para determinar se o estado de compra é PURCHASED
ou PENDING
. Observe que você precisa conceder titularidade apenas quando o estado for PURCHASED
. Para verificar
se há atualizações de status de Purchase
, faça o seguinte:
- Ao iniciar o app, chame
BillingClient.queryPurchases()
para recuperar a lista de produtos não consumidos associados ao usuário. - Chame
Purchase.getPurchaseState()
em cada objetoPurchase
retornado. - Implemente o método
onPurchasesUpdated()
para responder a mudanças em objetosPurchase
.
Além disso, a API Google Play Developer inclui um estado PENDING
para Purchases.products
.
Transações pendentes não são compatíveis com assinaturas.
Esta versão também introduz um novo tipo de notificação de desenvolvedor em tempo real, a OneTimeProductNotification
. Esse tipo de notificação contém uma única mensagem, cujo valor é ONE_TIME_PRODUCT_PURCHASED
ou ONE_TIME_PRODUCT_CANCELED
. Esse tipo de notificação é enviado apenas para compras associadas a formas de pagamento atrasadas, como dinheiro.
Confirme compras pendentes apenas quando o estado de compra for PURCHASED
, e não PENDING
.
Mudanças na API
A versão 2.0 da Biblioteca Google Play Faturamento contém várias mudanças na API para melhorar o suporte a novos recursos e esclarecer a funcionalidade existente.
consumeAsync
consumeAsync()
agora leva um objeto
ConsumeParams
em vez de um purchaseToken
. ConsumeParams
contém o purchaseToken
, bem como um payload opcional do desenvolvedor.
A versão anterior do consumeAsync()
foi removida nesta versão.
queryPurchaseHistoryAsync
Para evitar confusões,
queryPurchaseHistoryAsync()
agora retorna um objeto
PurchaseHistoryRecord
em vez de um objeto Purchase
. O objeto PurchaseHistoryRecord
é o mesmo que um objeto Purchase
, exceto pelo fato de refletir apenas os valores retornados por queryPurchaseHistoryAsync()
e não conter os campos autoRenewing
, orderId
e packageName
. Observe que nada foi modificado nos dados retornados: queryPurchaseHistoryAsync()
retorna os mesmos dados de antes.
Valores de retorno de BillingResult
As APIs que anteriormente retornavam um valor inteiro de BillingResponse
agora retornam um
objeto
BillingResult
. BillingResult
contém o número inteiro de BillingResponse
, bem como uma string de depuração que pode ser usada para diagnosticar erros. A string de depuração usa uma localidade en-US e não pode ser mostrada para usuários finais.
Correções de bugs
SkuDetails.getIntroductoryPriceAmountMicros()
agora retorna umlong
em vez de umaString
.
Biblioteca Google Play Faturamento versão 1.2.2 (07/03/2019)
A versão 1.2.2 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Correções de bugs
- Foi corrigido um problema de linha de execução introduzido na v1.2.1. Chamadas em segundo plano não bloqueiam mais a linha de execução principal.
Outras mudanças
- Embora o uso da linha de execução principal ainda seja recomendado, agora você pode instanciar a Biblioteca Google Play Faturamento em uma linha de execução em segundo plano.
- A instanciação foi completamente migrada para a linha de execução em segundo plano para reduzir a chance de causar ANRs.
Biblioteca Google Play Faturamento versão 1.2.1 (04-03-2019)
A versão 1.2.1 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Principais alterações
- Foi adicionada compatibilidade para produtos concedidos como prêmio. Para ver mais informações sobre opções de monetização, consulte Adicionar recursos específicos de produtos concedidos como prêmio.
Outras mudanças
- Construtores públicos para
PurchasesResult
eSkuDetailsResult
foram adicionados para facilitar os testes. - Objetos
SkuDetails
podem usar um novo método, ogetOriginalJson()
. - Todas as chamadas de serviço AIDL agora são controladas por linhas de execução em segundo plano.
Correções de bugs
- Listeners de callback nulos não são mais passados para APIs públicas.
Biblioteca Google Play Faturamento versão 1.2 (18-10-2018)
A versão 1.2 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Resumo das mudanças
- A Biblioteca Google Play Faturamento agora está licenciada sob o Contrato de Licença do kit de desenvolvimento de software do Android.
- Foi adicionada a API
launchPriceChangeConfirmationFlow
, que solicita que os usuários analisem uma mudança pendente feita no preço de uma assinatura. - Foi adicionado suporte a um novo modo de cálculo proporcional,
DEFERRED
, no momento do upgrade ou downgrade da assinatura de um usuário. - Na classe
BillingFlowParams
, substituindosetSku()
porsetSkuDetails()
. - Pequenas correções de bugs e otimizações de código.
Confirmação de alteração de preço
Agora você pode mudar o preço de uma assinatura no Google Play Console e solicitar que os usuários analisem e aceitem o novo preço ao entrarem no seu app.
Para usar essa API, crie um objeto PriceChangeFlowParams
usando os skuDetails
do produto por assinatura. Em seguida, chame launchPriceChangeConfirmationFlow()
. Implemente o PriceChangeConfirmationListener
para processar o resultado quando o fluxo de confirmação de mudança de preço terminar, conforme mostrado no snippet de código a seguir:
Kotlin
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Java
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
O fluxo de confirmação de mudança de preço exibe uma caixa de diálogo com as novas informações
de preço, pedindo que os usuários aceitem o novo valor. Esse fluxo retorna um código de resposta do tipo BillingClient.BillingResponse
.
Novo modo de cálculo proporcional
Ao fazer upgrade ou downgrade da assinatura de um usuário, você pode usar um novo modo de cálculo
proporcional, o DEFERRED
. Esse modo atualiza a assinatura do usuário na próxima renovação. Para saber mais sobre como definir esse modo de cálculo proporcional, consulte Definir modo de cálculo proporcional.
Novo método para definir detalhes de SKU
Na classe BillingFlowParams
, o método setSku()
foi descontinuado
Essa mudança serve para otimizar o fluxo do Google Play Faturamento.
Ao criar uma nova instância de BillingFlowParams
no seu cliente de faturamento
em apps, recomendamos que você trabalhe diretamente com o objeto JSON usando
setSkuDetails()
, conforme mostrado no snippet de código a seguir.
Na classe Builder BillingFlowParams
, o método setSku()
foi
descontinuado. Em vez disso, use o método setSkuDetails()
, conforme mostrado no snippet de código a seguir. O objeto transmitido para o objeto setSkuDetails()
vem do método querySkuDetailsAsync()
.
Kotlin
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Java
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Biblioteca Google Play Faturamento versão 1.1 (07-05-2018)
A versão 1.1 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Resumo das mudanças
- Foi adicionado suporte para a especificação de um método de cálculo proporcional em
BillingFlowParams
ao fazer upgrade/downgrade de uma assinatura antiga. - A sinalização booleana
replaceSkusProration
emBillingFlowParams
não é mais compatível. Em vez dela, usereplaceSkusProrationMode
. launchBillingFlow()
agora aciona um callback para respostas com falha.
Mudanças de comportamento
A versão 1.1 da Biblioteca Google Play Faturamento tem as mudanças de comportamento a seguir.
Os desenvolvedores podem definir o replaceSkusProrationMode
na classe BillingFlowParams
Um ProrationMode
oferece mais detalhes sobre o tipo de cálculo proporcional no momento do upgrade ou downgrade da assinatura de um usuário.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Atualmente, o Google Play é compatível com os seguintes modos de cálculo proporcional:
IMMEDIATE_WITH_TIME_PRORATION |
A substituição entrará em vigor imediatamente, e o novo prazo de expiração será calculado de modo proporcional e creditado ou cobrado do usuário. Esse é o comportamento padrão atual. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
A substituição entra em vigor imediatamente, e o ciclo de faturamento permanece o mesmo. O preço para o período restante será cobrado.
Observação: esta opção só está disponível para upgrade de assinatura. |
IMMEDIATE_WITHOUT_PRORATION |
A substituição entrará em vigor imediatamente, e o novo preço será cobrado no próximo período de recorrência. O ciclo de faturamento permanece o mesmo. |
replaceSkusProration
não é mais compatível com a classe BillingFlowParams
Os desenvolvedores podiam definir uma flag booleana para cobrar uma quantia de cálculo proporcional por uma solicitação de upgrade
de assinatura. Já que oferecemos suporte a ProrationMode
, que contém instruções de
cálculo proporcional mais detalhadas, essa flag booleana não é mais compatível.
launchBillingFlow()
agora aciona um callback para respostas com falha
A Biblioteca Google Play Faturamento aciona o callback PurhcasesUpdatedListener
e retorna uma BillingResponse
de forma assíncrona. O valor de retorno síncrono de BillingResponse
também é mantido.
Correções de bugs
- Sai corretamente no início de métodos assíncronos quando o serviço é desconectado.
- Os objetos de parâmetro
Builder
não se transformam mais em objetos compilados. - Problema 68087141: o
launchBillingFlow()
agora aciona um callback para respostas com falha.
Versão 1.0 da Biblioteca Google Play Faturamento (19-09-2017, Anúncio em inglês)
A versão 1.0 da Biblioteca Google Play Faturamento está disponível. Essa versão contém as alterações a seguir.
Mudanças importantes
- Uma permissão de faturamento foi incorporada no manifesto da biblioteca. Não é mais necessário adicionar a permissão
com.android.vending.BILLING
no manifesto do Android. - Novo builder adicionado à classe
BillingClient.Builder
. - Foi introduzido um padrão de builder para que a classe
SkuDetailsParams
seja usada em métodos de consulta de SKUs. - Vários métodos de API foram atualizados para fins de consistência, com os mesmos nomes e ordens de argumentos de retorno.
Mudanças de comportamento
A versão 1.0 da biblioteca do Google Play Faturamento tem as seguintes mudanças de comportamento.
Classe BillingClient.Builder
BillingClient.Builder
agora é inicializado pelo padrão newBuilder:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
O método launchBillingFlow agora é chamado com uma classe BillingFlowParams
Para iniciar o fluxo de faturamento para uma compra ou assinatura, o método
launchBillingFlow()
recebe uma instância
BillingFlowParams
inicializada com parâmetros específicos para a solicitação:
Kotlin
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Java
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Nova maneira de consultar produtos disponíveis
Os argumentos para os métodos queryPurchaseHistoryAsync()
e querySkuDetailsAsync()
foram agrupados em um padrão Builder:
Kotlin
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Java
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Por conveniência e para fins de consistência em toda a nossa API, o resultado agora é retornado usando um código e uma lista de objetos
SkuDetails
em vez das classes de wrapper anteriores:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Ordem de parâmetros modificada no método onConsumeResponse()
A ordem dos argumentos para onConsumeResponse
da interface ConsumeResponseListener
mudou para ser consistente em toda a nossa API:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Objeto PurchaseResult desagrupado
PurchaseResult
foi desagrupado para ser consistente em toda a nossa API:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Correções de bugs
- Nenhum código de resposta no pacote PURCHASES_UPDATED
- Correção de problemas de ProxyBillingActivity e PurchasesUpdatedListener durante a rotação do dispositivo
Versão 1 da Visualização do desenvolvedor (12-06-2017, Anúncio em inglês)
O Developer Preview foi lançado com o objetivo de simplificar o processo de desenvolvimento relacionado ao faturamento, permitindo que desenvolvedores concentrem os esforços em implementar lógicas específicas para o app para Android, como a arquitetura do aplicativo e a estrutura de navegação.
A biblioteca inclui várias classes e recursos convenientes para você usar ao integrar seus apps para Android à API Google Play Billing. A biblioteca também oferece uma camada de abstração sobre o serviço Linguagem de definição de interface do Android (AIDL), facilitando o trabalho dos desenvolvedores que precisam definir a interface entre o app e a API Google Play Billing.