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 do 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
Depois que 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 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 seu back-end.
Verificar se há direitos
Um 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');
}
}