Este documento descreve como migrar da Biblioteca Google Play Faturamento (PBL) 7 ou 8 para a PBL 9 e como integrar com os novos recursos.
Para conferir uma lista completa das mudanças na versão 9.0.0, consulte as notas da versão.
Visão geral
O PBL 9 contém melhorias nas APIs atuais e a remoção de APIs descontinuadas anteriormente. Esta versão da biblioteca também apresenta um contexto de erro mais completo com novos códigos de subresposta.
Compatibilidade com versões anteriores para upgrade da PBL
Para migrar para a PBL 9, é necessário atualizar ou remover algumas das referências de API atuais do app, conforme descrito nas notas da versão e mais adiante neste guia de migração.
Fazer upgrade da PBL 7 ou 8 para a PBL 9
Para fazer upgrade do PBL 7 ou 8 para o PBL 9, siga estas etapas:
Atualize a versão da dependência da Biblioteca Play Faturamento no arquivo
build.gradledo app.dependencies { def billing_version = "9.0.0" implementation "com.android.billingclient:billing:$billing_version" }Se você usa o Kotlin, o módulo KTX da Biblioteca Google Play Faturamento oferece suporte a extensões e corrotinas de Kotlin que permitem escrever Kotlin idiomático ao usar a Biblioteca Google Play Faturamento. Para incluir essas extensões no projeto, adicione a seguinte dependência ao arquivo
build.gradledo app, como mostrado:dependencies { val billing_version = "9.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(Aplicável apenas para upgrade da PBL 7 para a PBL 9). Atualize a implementação do método
queryProductDetailsAsync.Há uma mudança na assinatura do método
ProductDetailsResponseListener.onProductDetailsResponse, que exige mudanças no app para a implementação doqueryProductDetailsAsync. Para mais informações, consulte Mostrar produtos disponíveis para compra.Processar as APIs removidas.
A tabela a seguir lista as APIs removidas e as APIs alternativas correspondentes que você precisa usar no seu app.
Fazer upgrade de
O PBL 9 não é mais compatível com as APIs listadas na tabela a seguir. Se a sua implementação usar alguma dessas APIs removidas, consulte a tabela para ver as APIs alternativas correspondentes.
API descontinuada removida API alternativa a ser usada APIs queryPurchaseHistoryAsync Consulte Consultar histórico de compras. Se você estava usando queryPurchaseHistoryAsync para determinar a qualificação para testes sem custo financeiro, agora use ProductDetails.getSubscriptionOfferDetails() para determinar a quais ofertas um usuário se qualifica. BillingClient.SkuType BillingClient.ProductType. As constantes de tipo de produto INAPP e SUBS permanecem funcionalmente semelhantes às constantes de tipo de SKU descontinuadas. SkuDetails ProductDetails. Esse é o novo modelo de dados que oferece suporte aos produtos únicos. SkuDetailsParams Use QueryProductDetailsParams com queryProductDetailsAsync. SkuDetailsResponseListener Use ProductDetailsResponseListener com queryProductDetailsAsync. QueryPurchaseHistoryParams - Use queryPurchasesAsync para compras ativas ou pendentes.
- Rastreie as compras consumidas nos servidores de back-end.
- Use a API Voided Purchases do lado do servidor para compras canceladas ou anuladas.
getSkuDetailsList e setSkuDetailsList Use BillingFlowParams.Builder.setProductDetailsParamsList querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (API sem parâmetros) enablePendingPurchases(PendingPurchasesParams params)
A função enablePendingPurchases() descontinuada é funcionalmente equivalente aenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync Fazer upgrade de
A tabela a seguir lista as APIs removidas no PBL 9 e as APIs alternativas correspondentes que você precisa usar no app.
API descontinuada removida API alternativa a ser usada BillingClient.SkuType BillingClient.ProductType. As constantes de tipo de produto INAPP e SUBS permanecem funcionalmente semelhantes às constantes de tipo de SKU descontinuadas. SkuDetails ProductDetails. Esse é o novo modelo de dados que oferece suporte aos produtos únicos. SkuDetailsParams Use QueryProductDetailsParams com queryProductDetailsAsync. SkuDetailsResponseListener Use ProductDetailsResponseListener com queryProductDetailsAsync. QueryPurchaseHistoryParams - Use queryProductDetailsAsync para compras ativas ou pendentes.
- Rastreie as compras consumidas nos servidores de back-end.
- Use a API Voided Purchases do lado do servidor para compras canceladas ou anuladas.
getSkuDetailsList e setSkuDetailsList Use BillingFlowParams.Builder.setProductDetailsParamsList (Recomendado) Ative a reconexão automática do serviço.
A Biblioteca Play Faturamento pode tentar restabelecer automaticamente a conexão de serviço se uma chamada de API for feita enquanto o serviço estiver desconectado. Para mais informações, consulte Ativar a reconexão automática de serviços.
Processar novos códigos de subresposta.
O BillingResult retornado de
launchBillingFlow()agora inclui um campo de código de subresposta. Esse campo só será preenchido em alguns casos para fornecer um motivo mais específico para a falha. O campo de subresposta pode ter os seguintes valores:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS: retornado quando os fundos do usuário são menores que o preço do item que ele está tentando comprar.USER_INELIGIBLE: retornado quando o usuário não atende aos requisitos de qualificação configurados para uma oferta de assinatura.NO_APPLICABLE_SUB_RESPONSE_CODE: o valor padrão, retornado quando nenhum outro código de subresposta é aplicável.
Etapa de migração: atualize seu
PurchasesUpdatedListenerou o processamento de resultados equivalente para reconhecer e responder a esses códigos de sub-resposta específicos e oferecer uma experiência melhor ao usuário. Por exemplo, pedindo para corrigir as formas de pagamento ou mostrando uma mensagem de erro específica.Reclassificação de códigos de erro.
Nos casos em que o app Google Play Store é bloqueado pelo sistema (por exemplo, no modo infantil personalizado pelo OEM), o código de resposta da PBL mudou de
ERRORparaBILLING_UNAVAILABLE.Etapa de migração: verifique se a lógica de tratamento de erros acomoda essa mudança e não depende do recebimento de um erro genérico nesses cenários específicos.
Lide com a capacidade de aceitar valores nulos do
DeveloperProvidedBillingDetails.getLinkUri().Se você usa
DeveloperProvidedBillingDetailscomo parte de uma integração de pagamentos externa,getLinkUri()agora é@Nullable.Etapa de migração: para lidar com essa mudança com segurança, verifique se o código de integração processa os valores
nulle de string vazia ("") do métodoDeveloperProvidedBillingDetails.getLinkUri()antes de analisar ou iniciar intents do navegador. Exemplo:Kotlin
val linkUri = details.getLinkUri() if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)) context.startActivity(intent) }Java
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }Mudanças opcionais.
Compatibilidade com compras pendentes de planos pré-pagos. Para mais informações, consulte Gerenciar assinaturas e transações pendentes.
Assinaturas de parcelas virtuais. Para mais informações, consulte Integração de assinaturas parceladas.