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
BillingClienten 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
