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

  1. Introducción a las compras dentro de la aplicación
  2. Configuración del entorno
  3. Implementación de Google Play Billing Library
  4. Creación de productos en Google Play Console
  5. Realización de una compra
  6. Validación y manejo de compras
  7. Ejercicios prácticos

  1. 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).

  1. 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:

dependencies {
    implementation 'com.android.billingclient:billing:4.0.0'
}

Paso 2: Configurar permisos

Asegúrate de que tu archivo AndroidManifest.xml contenga los siguientes permisos:

<uses-permission android:name="com.android.vending.BILLING" />

  1. 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
    }
});

  1. Creación de productos en Google Play Console

  1. Ve a Google Play Console y selecciona tu aplicación.
  2. Navega a la sección "Productos integrados en la aplicación".
  3. Crea un nuevo producto (consumible, no consumible o suscripción).
  4. Completa la información requerida y guarda el producto.

  1. 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);

  1. 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
                    }
                }
            });
        }
    }
}

  1. Ejercicios prácticos

Ejercicio 1: Configuración básica

  1. Agrega la dependencia de Google Play Billing Library a tu proyecto.
  2. Configura los permisos necesarios en el archivo AndroidManifest.xml.

Ejercicio 2: Implementación de BillingClient

  1. Inicializa BillingClient en tu actividad principal.
  2. Conéctate a Google Play y maneja la conexión.

Ejercicio 3: Creación de productos

  1. Crea un producto consumible en Google Play Console.
  2. Consulta los productos disponibles en tu aplicación y muestra el precio al usuario.

Ejercicio 4: Realización de una compra

  1. Inicia el flujo de compra cuando el usuario decida comprar un producto.
  2. 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.

© Copyright 2024. Todos los derechos reservados