Cómo usar la Facturación Google Play en tu Actividad web de confianza

Esta guía es para apps web empaquetadas como una Actividad web de confianza. En el caso de las apps para Android escritas en Kotlin o Java, consulta la documentación de Facturación Google Play.

Las apps de Google Play que venden artículos digitales o suscripciones deben usar la Facturación de Google Play. En una actividad web de confianza, te integras con ella usando las siguientes APIs web, disponibles en Chrome 101 y versiones posteriores en Android y ChromeOS:

Requisitos

Para configurar la Facturación Google Play, necesitas lo siguiente:

No les cobres a los usuarios por descargar tu app desde Play Store. Tu PWA sigue estando disponible en la Web, por lo que una descarga pagada no restringe el acceso. En su lugar, vende funciones o contenido con compras directas desde la app o suscripciones.

Habilita la Facturación Play en tu proyecto de Android

Si compilas tu app con Bubblewrap, habilita la función playBilling en twa-manifest.json en la raíz de tu proyecto:

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

Luego, ejecuta bubblewrap update seguido de bubblewrap build y sube el nuevo paquete de Android a Play Store.

Si compilas tu app en Android Studio, agrega la biblioteca de Facturación Play de Android Browser Helper. Para conocer los cambios necesarios en DelegationService y AndroidManifest.xml, consulta la demostración de twa-play-billing.

Verifica la compatibilidad con la Facturación Google Play

Llama a getDigitalGoodsService() con el identificador de Play Store, https://play.google.com/billing. Si falta el método o falla la llamada, usa otro flujo de pago:

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.
  }
}

Muestra los detalles del producto

Usa getDetails() para recuperar el título, la descripción y el precio de tus IDs de producto, de modo que los precios que muestres coincidan con los de 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);
}

La API de artículos digitales no puede mostrar tus IDs de productos. Para consultarlos desde tu backend, usa la API de Google Play Developer.

Cómo realizar compras

Crea un PaymentRequest con https://play.google.com/billing como forma de pago y el ID del producto como sku en data. La Facturación Google Play usa el precio de Play Console, por lo que total es obligatorio, pero se ignora.

Después de que se resuelva show(), envía el token de compra a tu backend para verificar y confirmar la compra. Si no confirmas una compra en un plazo de tres días, Google Play reembolsará el importe al usuario y revocará la 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.
  }
}

Cómo verificar las compras de un usuario

Usa listPurchases() para encontrar los elementos que posee el usuario, como suscripciones activas, compras no consumidas o códigos promocionales canjeados. Verifica cada compra en tu backend y confirma las que aún no hayas confirmado:

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.
}

Cómo probar tu integración

Para realizar pruebas en un dispositivo Android antes de publicar en Play Store, sigue estos pasos:

  1. Usa Android 9 o una versión posterior con las opciones para desarrolladores habilitadas.
  2. En Chrome, ve a chrome://flags y habilita #enable-debug-for-store-billing.
  3. Publica tu sitio con HTTPS. La API de artículos digitales no está disponible a través de HTTP.

Cuando tu app se instala desde Play Store, no necesitas la marca. Para realizar pruebas con cuentas y productos de prueba, consulta Cómo probar la integración de la Biblioteca de Facturación Google Play.

Próximos pasos