Publicado em 2 de dezembro de 2020
Além de permitir que seu app venda produtos e assinaturas digitais na Play Store, o Google Play Faturamento oferece ferramentas para gerenciar seu catálogo, preços e assinaturas, relatórios úteis e um fluxo de finalização de compra com a Play Store que já é familiar para seus usuários. É um requisito para aplicativos publicados na Play Store que vendem produtos digitais.
A API Google Play Faturamento tem a própria terminologia e inclui componentes de cliente e back-end. Esta seção aborda apenas uma pequena parte da API específica para o uso da API Digital Goods e da Atividade confiável na Web. Leia a documentação do Google Play Faturamento e entenda os conceitos antes de fazer a integração em um aplicativo de produção.
Fluxo básico
Para fornecer bens digitais com a Play Store, configure seu catálogo na Play Store e conecte a Play Store como uma forma de pagamento da PWA.
Para fazer isso, siga estas etapas na interface da Play Store:
- Clique em Produtos no menu do Play Console. Conferir os produtos e assinaturas no app.

- Clique em Criar produto para adicionar um novo produto.

- Adicione um ID, nome, descrição e preço do produto. Crie IDs de produtos significativos e fáceis de lembrar, porque você vai precisar deles mais tarde. Os IDs não podem ser alterados depois de criados.

- Se você estiver criando uma assinatura, também precisará especificar um período de faturamento. Você pode listar os benefícios da assinatura e adicionar recursos, como testes sem custo financeiro, preços iniciais, um período de carência e uma opção de renovação.
- Clique em Ativar para disponibilizar o produto.
Se preferir, adicione seus produtos com a API Play Developers.
Depois de configurar o catálogo, a próxima etapa é configurar o fluxo de finalização de compra na PWA. Use uma combinação da API Digital Goods e da API Payment Request.
Extrair o preço de um produto com a API Digital Goods
Ao usar o Google Play Faturamento, verifique se o preço exibido para os usuários corresponde ao preço da página "Detalhes do app". Seria impossível manter esses preços sincronizados manualmente. Por isso, a API Digital Goods oferece uma maneira de o aplicativo da Web consultar o provedor de pagamento para saber os preços:
// The SKU for the product, as defined in the Play Store interface async function populatePrice(sku) { try { // Check if the Digital Goods API is supported by the browser. if (window.getDigitalGoodsService) { // The Digital Goods API can be supported by other Payments provider. // In this case, we're retrieving the Google Play Billing provider. const service = await window.getDigitalGoodsService("https://play.google.com/billing"); // Fetch product details using the `getDetails()` method. const details = await service.getDetails([sku]); if (details.length === 0) { console.log(`Could not get SKU: "${sku}".`); return false; } // The details contain both the price and the currenncy. item = details[0]; const value = item.price.value; const currency = item.price.currency; const formattedPrice = new Intl.NumberFormat(navigator.language, { style: 'currency', currency: currency }).format(value); // Display the price to the user. document.getElementById("price").innerHTML = formattedPrice; } else { console.error("Could not get price for SKU \"" + sku + "\"."); } } catch (error) { console.log(error); } return false; } É possível detectar o suporte à API Digital Goods verificando se getDigitalGoodsService() está disponível no objeto window.
Em seguida, chame window.getDigitalGoodsService() com o identificador de faturamento do Google Play como parâmetro. Isso retorna uma instância de serviço para o Google Play Faturamento, e outros fornecedores podem implementar suporte à API Digital Goods e ter identificadores diferentes.
Por fim, chame getDetails() na referência ao objeto Google Play Faturamento transmitindo o SKU do item como um parâmetro. O método retorna um objeto de detalhes contendo o preço e a moeda do item que pode ser exibido ao usuário.
Iniciar o fluxo de compra
A API Payment Request permite fluxos de compra na Web e também é usada para a integração do Faturamento do Google Play. Confira este artigo Como a API Payment Request funciona para saber mais se você é novo na API Payment Request.
Para usar a API com o Google Play Faturamento, você precisa adicionar um instrumento de pagamento, que tem um método chamado https://play.google.com/billing. Adicione o SKU como parte dos dados do instrumento:
const supportedInstruments = [{ supportedMethods: "https://play.google.com/billing", data: { sku: sku } }]; Em seguida, crie um objeto PaymentRequest como de costume e use a API normalmente.
const request = new PaymentRequest(supportedInstruments, details); Confirmar a compra
Quando a transação for concluída, use a API Digital Goods para confirmar o pagamento. O objeto de resposta do PaymentRequest contém um token que pode ser usado para confirmar a transação:
const response = await request.show(); const token = response.details.token; const service = await window.getDigitalGoodsService("https://play.google.com/billing"); await service.acknowledge(token, 'onetime'); A API Digital Goods e a API Payment Request não têm conhecimento sobre a identidade do usuário. Como resultado, cabe a você associar a compra ao usuário no seu back-end e garantir que ele tenha acesso aos itens comprados. Ao associar a compra a um usuário, salve o token de compra, porque você pode precisar dele para verificar se a compra foi cancelada ou reembolsada ou se uma assinatura ainda está ativa. Confira a API Notificações do desenvolvedor em tempo real e a API Google Play Developer, que oferecem endpoints para processar esses casos no back-end.
Verificar se há direitos
O usuário pode ter resgatado um código promocional ou ter uma assinatura do seu produto. Para validar se o usuário tem os direitos adequados, chame o comando listPurchases() no serviço de produtos digitais. Isso retorna todas as compras que o cliente fez no app. Esse também é o lugar para confirmar compras não confirmadas para garantir que o usuário resgate os direitos corretamente.
const purchases = await itemService.listPurchases(); for (p of purchases) { if (!p.acknowledged) { await itemService.acknowledge(p.purchaseToken, 'onetime'); } }