Las compras dentro de la aplicación (In-App Purchases, IAP) permiten a los desarrolladores monetizar sus aplicaciones ofreciendo contenido adicional, suscripciones o características premium. En este tema, aprenderemos cómo implementar compras dentro de la aplicación en Android utilizando Google Play Billing Library.
Contenidos
- Introducción a las compras dentro de la aplicación
- Configuración del entorno
- Implementación de Google Play Billing Library
- Creación de productos en Google Play Console
- Realización de una compra
- Validación y manejo de compras
- Ejercicios prácticos
- Introducción a las compras dentro de la aplicación
Las compras dentro de la aplicación permiten a los usuarios comprar contenido adicional o características directamente desde la aplicación. Existen tres tipos principales de compras dentro de la aplicación:
- Consumibles: Productos que se pueden comprar múltiples veces (por ejemplo, monedas en un juego).
- No consumibles: Productos que se compran una sola vez y no se pueden volver a comprar (por ejemplo, una actualización a la versión premium).
- Suscripciones: Acceso a contenido o servicios durante un período de tiempo (por ejemplo, una suscripción mensual a una revista).
- Configuración del entorno
Paso 1: Agregar dependencias
Primero, debemos agregar la dependencia de Google Play Billing Library en el archivo build.gradle
de la aplicación:
Paso 2: Configurar permisos
Asegúrate de que tu archivo AndroidManifest.xml
contenga los siguientes permisos:
- Implementación de Google Play Billing Library
Paso 1: Inicializar BillingClient
Inicializa BillingClient
en tu actividad principal:
BillingClient billingClient = BillingClient.newBuilder(this) .setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) { for (Purchase purchase : purchases) { handlePurchase(purchase); } } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) { // El usuario canceló la compra } else { // Manejar otros códigos de respuesta } } }) .enablePendingPurchases() .build();
Paso 2: Conectar a Google Play
Conéctate a Google Play:
billingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // El cliente de facturación está listo } } @Override public void onBillingServiceDisconnected() { // Intenta reconectar } });
- Creación de productos en Google Play Console
- Ve a Google Play Console y selecciona tu aplicación.
- Navega a la sección "Productos integrados en la aplicación".
- Crea un nuevo producto (consumible, no consumible o suscripción).
- Completa la información requerida y guarda el producto.
- Realización de una compra
Paso 1: Consultar productos disponibles
Consulta los productos disponibles para la compra:
List<String> skuList = new ArrayList<>(); skuList.add("your_product_id"); SkuDetailsParams params = SkuDetailsParams.newBuilder() .setSkusList(skuList) .setType(BillingClient.SkuType.INAPP) .build(); billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) { for (SkuDetails skuDetails : skuDetailsList) { String sku = skuDetails.getSku(); String price = skuDetails.getPrice(); // Mostrar el precio al usuario y permitir la compra } } } });
Paso 2: Iniciar el flujo de compra
Inicia el flujo de compra cuando el usuario decida comprar un producto:
BillingFlowParams flowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build(); BillingResult billingResult = billingClient.launchBillingFlow(this, flowParams);
- Validación y manejo de compras
Paso 1: Manejar la compra
Maneja la compra en el método onPurchasesUpdated
:
private void handlePurchase(Purchase purchase) { if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) { // Verificar la compra en el servidor // Proporcionar el contenido al usuario if (!purchase.isAcknowledged()) { AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchase.getPurchaseToken()) .build(); billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() { @Override public void onAcknowledgePurchaseResponse(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // La compra ha sido reconocida } } }); } } }
- Ejercicios prácticos
Ejercicio 1: Configuración básica
- Agrega la dependencia de Google Play Billing Library a tu proyecto.
- Configura los permisos necesarios en el archivo
AndroidManifest.xml
.
Ejercicio 2: Implementación de BillingClient
- Inicializa
BillingClient
en tu actividad principal. - Conéctate a Google Play y maneja la conexión.
Ejercicio 3: Creación de productos
- Crea un producto consumible en Google Play Console.
- Consulta los productos disponibles en tu aplicación y muestra el precio al usuario.
Ejercicio 4: Realización de una compra
- Inicia el flujo de compra cuando el usuario decida comprar un producto.
- Maneja la compra y proporciona el contenido al usuario.
Soluciones
Ejercicio 1
// build.gradle dependencies { implementation 'com.android.billingclient:billing:4.0.0' } // AndroidManifest.xml <uses-permission android:name="com.android.vending.BILLING" />
Ejercicio 2
// Inicialización de BillingClient BillingClient billingClient = BillingClient.newBuilder(this) .setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) { // Manejar la compra } }) .enablePendingPurchases() .build(); // Conexión a Google Play billingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // El cliente de facturación está listo } } @Override public void onBillingServiceDisconnected() { // Intenta reconectar } });
Ejercicio 3
// Consulta de productos disponibles List<String> skuList = new ArrayList<>(); skuList.add("your_product_id"); SkuDetailsParams params = SkuDetailsParams.newBuilder() .setSkusList(skuList) .setType(BillingClient.SkuType.INAPP) .build(); billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) { for (SkuDetails skuDetails : skuDetailsList) { String sku = skuDetails.getSku(); String price = skuDetails.getPrice(); // Mostrar el precio al usuario y permitir la compra } } } });
Ejercicio 4
// Iniciar el flujo de compra BillingFlowParams flowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build(); BillingResult billingResult = billingClient.launchBillingFlow(this, flowParams); // Manejar la compra private void handlePurchase(Purchase purchase) { if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) { // Verificar la compra en el servidor // Proporcionar el contenido al usuario if (!purchase.isAcknowledged()) { AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchase.getPurchaseToken()) .build(); billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() { @Override public void onAcknowledgePurchaseResponse(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // La compra ha sido reconocida } } }); } } }
Conclusión
En esta sección, hemos aprendido cómo implementar compras dentro de la aplicación utilizando Google Play Billing Library. Hemos cubierto desde la configuración inicial hasta la realización y manejo de compras. Con estos conocimientos, puedes monetizar tu aplicación ofreciendo contenido adicional, suscripciones o características premium. Asegúrate de seguir las mejores prácticas y validar las compras en tu servidor para garantizar la seguridad y la integridad de las transacciones.
Curso de Android Studio
Módulo 1: Introducción a Android Studio
- Introducción a Android Studio
- Configuración de Android Studio
- Entendiendo la interfaz de Android Studio
- Creando tu primer proyecto Android
Módulo 2: Desarrollo básico de Android
- Entendiendo la estructura del proyecto Android
- Introducción a los diseños XML
- Componentes básicos de la interfaz de usuario
- Introducción a las actividades
- Ejecutando tu aplicación en un emulador
Módulo 3: Desarrollo intermedio de Android
- Introducción a los Intents
- Trabajando con Fragmentos
- Manejo de la entrada del usuario
- Usando RecyclerView
- Redes en Android
Módulo 4: Desarrollo avanzado de Android
- Persistencia de datos con SQLite
- Usando Room para la gestión de bases de datos
- Componentes avanzados de la interfaz de usuario
- Vistas personalizadas y Canvas
- Trabajando con tareas en segundo plano
Módulo 5: Desarrollo profesional de Android
- Implementando la arquitectura MVVM
- Inyección de dependencias con Dagger
- Pruebas unitarias y pruebas de interfaz de usuario
- Publicando tu aplicación en Google Play
- Optimización del rendimiento