Usar o Google Play Faturamento

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:

  1. Clique em Produtos no menu do Play Console. Conferir os produtos e assinaturas no app. Etapa 1: encontre a seção "Produtos".
  2. Clique em Criar produto para adicionar um novo produto. Etapa 2: acesse a interface "Produtos" para adicionar novos produtos.
  3. Adicione um ID, nome, descrição e preço do produto. Crie IDs de produto significativos e fáceis de lembrar, porque eles serão necessários mais tarde. Os IDs não podem ser alterados depois de criados. Vários campos vazios para cada produto.
  4. Se você estiver criando uma assinatura, também precisará especificar um período de faturamento. É possível listar os benefícios da assinatura e adicionar recursos, como testes sem custo financeiro, preços iniciais, período de carência e uma opção de reativação.
  5. 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 do PWA. Use uma combinação da API Digital Goods e da API Payment Request.

Buscar 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 detalhado que contém o preço e a moeda do item, que pode ser mostrado 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 Como funciona a API Payment Request para saber mais se você é iniciante na API Payment Request.

Para usar a API com o Google Play Faturamento, você precisa adicionar um instrumento de pagamento, que tenha um método compatível 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 de produtos e softwares digitais 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

É possível que o usuário tenha resgatado um código promocional ou já tenha 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');
  }
}