Usar o Google Play Faturamento na sua Atividade Confiável na Web

Este guia é para apps da Web empacotados como uma Atividade Confiável na Web. Para apps Android escritos em Kotlin ou Java, consulte a documentação do Google Play Faturamento.

Os apps no Google Play que vendem produtos e softwares digitais ou assinaturas precisam usar o Google Play Faturamento. Em uma Atividade Confiável na Web, você faz a integração usando as seguintes APIs da Web, disponíveis no Chrome 101 e versões mais recentes no Android e no ChromeOS:

Requisitos

Para configurar o Google Play Faturamento, você precisa do seguinte:

Não cobre os usuários pelo download do seu app na Google Play Store. Seu PWA ainda está disponível na Web, então um download pago não restringe o acesso. Em vez disso, venda recursos ou conteúdo com compras no app ou assinaturas.

Ativar o Google Play Faturamento no projeto do Android

Se você criar o app com o Bubblewrap, ative o recurso playBilling em twa-manifest.json na raiz do projeto:

"features": {
  "playBilling": {
    "enabled": true
  }
}

Em seguida, execute bubblewrap update seguido por bubblewrap build e faça upload do novo pacote do Android para a Google Play Store.

Se você criar o app no Android Studio, adicione a biblioteca Android Browser Helper Play Billing. Para as mudanças necessárias em DelegationService e AndroidManifest.xml, consulte a demonstração do twa-play-billing.

Verificar se há suporte para o Google Play Faturamento

Chame getDigitalGoodsService() com o identificador da Google Play Store, https://play.google.com/billing. Se o método estiver ausente ou a chamada falhar, use outro fluxo de pagamento:

if ('getDigitalGoodsService' in window) {
  try {
    const service =
        await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing is available.
  } catch (error) {
    // Google Play Billing isn't available. Use another payment flow.
  }
}

Mostrar detalhes do produto

Use getDetails() para recuperar o título, a descrição e o preço dos IDs de produto, para que os preços exibidos correspondam à Play Store:

const details = await service.getDetails(['shiny_sword', 'gem']);
for (const item of details) {
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
  ).format(item.price.value);

  renderProductDetails(
      item.itemId, item.title, localizedPrice, item.description);
}

A API Digital Goods não pode listar os IDs dos seus produtos. Para consultá-los no seu back-end, use a API Google Play Developer.

Fazer uma compra

Crie um PaymentRequest com https://play.google.com/billing como forma de pagamento e o ID do produto como sku em data. O Google Play Faturamento usa o preço do Play Console. Portanto, total é obrigatório, mas ignorado.

Depois que show() for resolvido, envie o token de compra ao back-end para verificar e confirmar a compra. Se você não confirmar uma compra em até três dias, o Google Play vai reembolsar o usuário e revogar a compra.

async function makePurchase(service, sku) {
  const paymentMethods = [{
    supportedMethods: 'https://play.google.com/billing',
    data: {sku},
  }];
  // Required by the Payment Request API, but ignored by Google Play Billing.
  const paymentDetails = {
    total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
  };

  const request = new PaymentRequest(paymentMethods, paymentDetails);
  try {
    const response = await request.show();
    const {purchaseToken} = response.details;

    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
      // Optional: consume the purchase so the user can buy the item again.
      await service.consume(purchaseToken);
      await response.complete('success');
    } else {
      await response.complete('fail');
    }
  } catch (error) {
    // An AbortError usually means the user canceled the purchase.
  }
}

Verificar as compras de um usuário

Use listPurchases() para encontrar itens que pertencem ao usuário, como assinaturas ativas, compras não consumidas ou códigos promocionais resgatados. Verifique cada compra no back-end e confirme as que ainda não foram confirmadas:

const purchases = await service.listPurchases();
for (const p of purchases) {
  await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
  // Update the UI with items the user is entitled to.
}

Testar sua integração

Para testar em um dispositivo Android antes de publicar na Google Play Store, siga estas etapas:

  1. Use o Android 9 ou mais recente com as opções do desenvolvedor ativadas.
  2. No Chrome, acesse chrome://flags e ative #enable-debug-for-store-billing.
  3. Exiba seu site por HTTPS. A API Digital Goods não está disponível por HTTP.

Quando o app é instalado pela Google Play Store, você não precisa da flag. Para testar com contas e produtos de teste, consulte Testar a integração da Biblioteca Google Play Faturamento.

Próximas etapas