Fecha de publicación: 2 de diciembre de 2020
Además de permitir que tu app venda bienes digitales y suscripciones en Play Store, la Facturación Google Play ofrece herramientas para administrar tu catálogo, precios y suscripciones, informes útiles y un flujo de confirmación potenciado por Play Store que ya es familiar para tus usuarios. Es un requisito para las aplicaciones publicadas en Play Store que venden artículos digitales.
La API de Google Play Billing tiene su propia terminología y, además, incluye componentes de cliente y backend. En esta sección, se abarca solo una pequeña parte de la API que es específica para usar la API de Digital Goods y la actividad web de confianza. Asegúrate de leer la documentación de la Facturación Google Play y comprender sus conceptos antes de integrarla en una aplicación de producción.
El flujo básico
Para proporcionar productos digitales con Play Store, configura tu catálogo en Play Store y conéctalo como forma de pago desde tu AWP.
Para hacerlo, sigue estos pasos en la interfaz de Play Store:
- Haz clic en Productos en el menú de Play Console. Consulta tus productos integrados en la aplicación y suscripciones existentes.
- Haz clic en Crear producto para agregar uno nuevo.
- Agrega un ID de producto, un nombre, una descripción y un precio. Crea IDs de productos significativos y fáciles de recordar, ya que los necesitarás más adelante. Los IDs no se pueden cambiar una vez creados.
- Si creas una suscripción, también debes especificar un período de facturación. Puedes enumerar los beneficios de tu suscripción y agregar funciones, como pruebas gratuitas, precios de lanzamiento, un período de gracia y una opción para volver a suscribirse.
- Haz clic en Activar para que el producto esté disponible.
Si lo prefieres, puedes agregar tus productos con la API de Play Developers.
Una vez que se configure tu catálogo, el siguiente paso es configurar el flujo de confirmación de la compra desde la AWP. Usa una combinación de la API de Digital Goods y la API de Payment Request.
Cómo recuperar el precio de un producto con la API de Digital Goods
Cuando uses la Facturación Google Play, asegúrate de que el precio que se muestre a los usuarios coincida con el de la ficha de Play Store. Sería imposible mantener esos precios sincronizados de forma manual, por lo que la API de Digital Goods proporciona una forma para que la aplicación web consulte los precios al proveedor de pagos subyacente:
// 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;
}
Para detectar la compatibilidad con la API de Digital Goods, verifica si getDigitalGoodsService()
está disponible en el objeto window
.
Luego, llama a window.getDigitalGoodsService()
con el identificador de Facturación Google Play como parámetro.
Esto muestra una instancia de servicio para la Facturación Google Play, y otros proveedores pueden implementar compatibilidad con la API de Digital Goods y tener identificadores diferentes.
Por último, llama a getDetails()
en la referencia al objeto de Facturación Google Play y pasa el SKU del elemento como parámetro. El método muestra un objeto de detalles que contiene el precio y la moneda del artículo que se puede mostrar al usuario.
Cómo iniciar el flujo de compra
La API de Payment Request habilita los flujos de compra en la Web y también se usa para la integración de la Facturación Google Play. Consulta este artículo sobre cómo funciona la API de Payment Request para obtener más información si es la primera vez que usas la API de Payment Request.
Para usar la API con la Facturación Google Play, debes agregar un instrumento de pago, que tiene un método compatible llamado https://play.google.com/billing
.
Agrega el SKU como parte de los datos del instrumento:
const supportedInstruments = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku
}
}];
Luego, compila un objeto PaymentRequest
como de costumbre y usa la API como de costumbre.
const request = new PaymentRequest(supportedInstruments, details);
Confirma la compra
Una vez que se complete la transacción, usa la API de Digital Goods para confirmar el pago. El objeto de respuesta de PaymentRequest
contiene un token que puedes usar para confirmar la transacción:
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');
La API de Digital Goods y la API de Payment Request no tienen conocimiento de la identidad del usuario. Como resultado, depende de ti asociar la compra al usuario en tu backend y asegurarte de que tenga acceso a los artículos comprados. Cuando asocies la compra a un usuario, recuerda guardar el token de compra, ya que es posible que lo necesites para verificar si la compra se canceló o se reembolsó, o si una suscripción sigue activa. Consulta la API de Real Time Developer Notifications y la API de Google Play Developer, ya que proporcionan extremos para controlar esos casos en tu backend.
Verifica los derechos existentes
Es posible que un usuario haya canjeado un código promocional o tenga una suscripción existente a tu producto. Para validar que el usuario tenga los derechos adecuados, puedes llamar al comando listPurchases()
en el servicio de bienes digitales. Esto muestra todas las compras que el cliente realizó en tu app. Este también sería el lugar para confirmar las compras no confirmadas para garantizar que el usuario canjee correctamente sus derechos.
const purchases = await itemService.listPurchases();
for (p of purchases) {
if (!p.acknowledged) {
await itemService.acknowledge(p.purchaseToken, 'onetime');
}
}