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:
- API de artículos digitales: Recupera los detalles del producto y las compras del usuario.
- API de Payment Request: Inicia el flujo de compra.
Requisitos
Para configurar la Facturación Google Play, necesitas lo siguiente:
- Una cuenta de desarrollador de Google Play y una cuenta de comerciante de Google Payments que estén vinculadas entre sí
- Una ficha de Play Store con una versión en el segmento de pruebas públicas, cerradas o internas
- Los productos y las suscripciones de tu app configurados en Play Console
- Un proyecto de actividad web de confianza con una configuración de Vínculos de recursos digitales que funcione
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:
- Usa Android 9 o una versión posterior con las opciones para desarrolladores habilitadas.
- En Chrome, ve a
chrome://flagsy habilita#enable-debug-for-store-billing. - 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
- Verifica las compras en tu backend con una biblioteca cliente de la API de Google Play Developer.
- Obtén más información para vender suscripciones.
- Configura las notificaciones para desarrolladores en tiempo real para hacer un seguimiento de los cambios en las suscripciones.