La descontinuación del popular InAppBillingPlugin ha dejado a muchos desarrolladores de .NET MAUI buscando orientación sobre cómo implementar compras dentro de la aplicación (in-app purchases) en sus proyectos. Reconociendo esta necesidad, hoy estamos emocionados de presentar una muestra exhaustiva y completamente funcional que demuestra cómo implementar un sistema de facturación multiplataforma para Android, iOS, Mac Catalyst y Windows. Esta solución utiliza las APIs específicas de cada plataforma, pero lo hace a través de una interfaz unificada, lo que simplifica enormemente el desarrollo y el mantenimiento.
Presentamos el Ejemplo BillingService para .NET MAUI
Nuestro nuevo ejemplo BillingService es una guía completa para integrar los sistemas de facturación nativos de cada plataforma en tus aplicaciones .NET MAUI. Lo más destacable es que lo consigue manteniendo un código limpio y fácil de mantener, gracias al uso de patrones arquitectónicos fundamentales como la Inyección de Dependencias (Dependency Injection) y el patrón Modelo-Vista-ViewModel (MVVM). Este enfoque no solo facilita la comprensión del código, sino que también promueve la modularidad y la escalabilidad de tus aplicaciones.
El ejemplo incluye implementaciones completas y robustas para los principales ecosistemas:
- Android: Integración con Google Play Billing Client v7, la última versión de la API de facturación de Google Play.
- iOS y Mac Catalyst: Utiliza StoreKit, la potente y consolidada plataforma de Apple para gestionar compras dentro de la aplicación.
- Windows: Se conecta directamente con las APIs de Microsoft Store, permitiendo monetizar tus aplicaciones en el ecosistema Windows.
Este ejemplo es una herramienta invaluable para cualquier desarrollador que desee añadir capacidades de monetización a sus aplicaciones .NET MAUI de manera eficiente y siguiendo las mejores prácticas.
Una Mirada Profunda a la Arquitectura del Ejemplo
El ejemplo BillingService ha sido diseñado para mostrar no solo cómo implementar la facturación, sino también cómo aplicar patrones arquitectónicos clave para el desarrollo multiplataforma en .NET MAUI. Su diseño permite una gran flexibilidad y adaptabilidad a diferentes plataformas.
Interfaz Unificada: IBillingService
El corazón de esta implementación es una interfaz limpia y bien definida: IBillingService. Esta interfaz es crucial porque abstrae las complejidades y diferencias de las operaciones de facturación específicas de cada plataforma. Al trabajar con esta interfaz, tu código de aplicación permanece agnóstico a la plataforma subyacente, lo que reduce la duplicación de código y mejora la mantenibilidad. Aquí te mostramos cómo se define:
public interface IBillingService
{
Task<bool> InitializeAsync();
Task<IEnumerable<Product>> GetProductsAsync();
Task<PurchaseResult> PurchaseAsync(string productId);
Task<bool> RestorePurchasesAsync();
bool IsProductOwned(string productId);
}
Cada método en esta interfaz maneja una operación de facturación común, desde la inicialización del servicio hasta la obtención de productos, la realización de una compra, la restauración de compras anteriores y la verificación de la propiedad de un producto.
Implementaciones Específicas por Plataforma
Para cada plataforma, el ejemplo proporciona un archivo de implementación dedicado. Esto se logra de forma elegante utilizando la compilación condicional, una característica poderosa en .NET que permite incluir código específico según el objetivo de la compilación:
BillingService.Android.cs: Contiene toda la lógica para la integración con Google Play Billing.BillingService.iOS.cs: Implementa StoreKit, y es notable que este mismo archivo se comparte tanto para iOS como para Mac Catalyst, ya que ambos utilizan las APIs de StoreKit 1 de forma idéntica.BillingService.Windows.cs: Se encarga de la integración con las APIs de Microsoft Store.
El archivo del proyecto (.csproj) utiliza directivas de compilación condicional para garantizar que la implementación correcta se compile e incluya para cada plataforma de destino. Esta estrategia garantiza que la aplicación solo contenga el código necesario para la plataforma en la que se está ejecutando, optimizando el tamaño y el rendimiento.
Inyección de Dependencias para Flexibilidad
La Inyección de Dependencias (DI) es un pilar fundamental en la arquitectura moderna de .NET, y este ejemplo la utiliza de manera eficaz. El servicio de facturación se registra en el archivo MauiProgram.cs, lo que permite que el tiempo de ejecución de .NET MAUI resuelva automáticamente la implementación específica de la plataforma correcta cuando se solicita una instancia de IBillingService. Esto no solo simplifica la configuración, sino que también hace que tu código sea más flexible y fácil de probar:
builder.Services.AddSingleton<IBillingService, Services.BillingService>();
builder.Services.AddTransient<ProductsViewModel>();
Al utilizar DI, desacoplamos la lógica de la aplicación de las implementaciones concretas de la facturación, lo que facilita el intercambio o la actualización de los servicios de facturación sin afectar el resto de la aplicación.
Una Nota Importante sobre la Implementación de StoreKit
La implementación actual para iOS y Mac Catalyst en el ejemplo utiliza StoreKit 1. Es importante destacar que StoreKit 1 sigue siendo totalmente funcional en todas las versiones actuales de iOS, incluyendo iOS 18 y futuras. Sin embargo, en la WWDC 2024, Apple anunció la depreciación de StoreKit 1 a favor de StoreKit 2. StoreKit 2 ofrece características mejoradas, APIs modernas centradas en Swift y soporte nativo para async/await, lo que promete una experiencia de desarrollo más fluida y poderosa.
Aunque StoreKit 1 sigue funcionando perfectamente para las implementaciones existentes, Apple ha indicado que las futuras mejoras y nuevas funcionalidades serán exclusivas de StoreKit 2. Este ejemplo proporciona una implementación lista para producción que puedes usar en tus aplicaciones hoy mismo. El equipo de .NET está trabajando activamente en la interoperabilidad con Swift y planea actualizar este ejemplo una vez que el soporte completo para StoreKit 2 esté disponible en .NET para iOS. La migración a StoreKit 2 traerá consigo mejoras significativas, como un manejo de transacciones superior, una gestión de suscripciones más avanzada y la adopción de patrones asíncronos modernos. Mientras tanto, tus aplicaciones que utilicen StoreKit 1 continuarán funcionando sin problemas.
Importante
Para aplicaciones de producción, es fundamental implementar la validación de compras y la verificación de recibos en el lado del servidor. Esto es crucial para garantizar la seguridad de tus transacciones y prevenir fraudes. Este ejemplo se centra principalmente en los patrones de implementación del lado del cliente, por lo que la lógica del servidor deberá ser desarrollada por separado.
Cómo Empezar con el Ejemplo BillingService
Explorar el ejemplo BillingService es el primer paso para dominar la facturación in-app en .NET MAUI. Puedes acceder a él de varias maneras para ver cómo se implementa la facturación en cada plataforma:
- Navega por el código fuente completo en el repositorio de ejemplos de .NET MAUI en GitHub.
- Consulta el navegador de ejemplos en línea para ver el ejemplo en acción y comprender su estructura.
- Clona el repositorio en tu máquina de desarrollo y ejecuta el ejemplo para una experiencia práctica y de depuración.
El ejemplo viene acompañado de una documentación detallada en su archivo README, que incluye instrucciones específicas para la configuración en cada plataforma, como la Google Play Console, App Store Connect y el Centro de Partners de Microsoft. Esta documentación es esencial para preparar tus entornos de desarrollo y probar las funcionalidades de facturación.
Requisitos de Configuración Esenciales
Antes de poder probar las compras dentro de la aplicación, es imprescindible configurar tus productos y tu entorno en las respectivas consolas de desarrollador de cada plataforma. Cada una tiene sus propios pasos:
- Android: Necesitarás configurar productos en la Google Play Console y también configurar cuentas de probadores de licencias para simular compras.
- iOS/Mac Catalyst: Deberás crear productos dentro de App Store Connect y establecer cuentas de probadores de sandbox de Apple para pruebas.
- Windows: Se requiere configurar complementos (add-ons) en el Centro de Partners de Microsoft y asociar tu aplicación con la Tienda de Microsoft.
La documentación del ejemplo proporciona una guía paso a paso para cada uno de estos requisitos, asegurando que puedas configurar tu entorno de prueba de manera efectiva.
Aprende Más y Aplicaciones Clave
El ejemplo BillingService no es solo una solución para la facturación; es una demostración práctica de patrones y técnicas que puedes adaptar y aplicar a tus propias aplicaciones .NET MAUI. Las principales lecciones y patrones que puedes extraer incluyen:
- Cómo crear y utilizar una interfaz unificada para operaciones que varían entre plataformas.
- El uso adecuado de la compilación condicional para gestionar código específico de plataforma de forma eficiente.
- La integración efectiva de la inyección de dependencias y el patrón MVVM para una arquitectura robusta.
- Estrategias para el manejo de errores y la provisión de retroalimentación clara al usuario durante las operaciones de facturación.
- Enfoques recomendados para las estrategias de prueba de compras dentro de la aplicación.
Te invitamos a visitar el navegador de ejemplos de .NET MAUI para explorar este y muchos otros ejemplos que te ayudarán a construir aplicaciones multiplataforma de mayor calidad. El ecosistema .NET MAUI sigue creciendo, ofreciendo herramientas y recursos para facilitar tu camino como desarrollador.
Recursos Adicionales
Para profundizar aún más en cada aspecto, aquí tienes una lista de recursos esenciales:
- BillingService Sample – Acceso directo al código fuente completo.
- Documentación de Google Play Billing – Detalles técnicos para la implementación en Android.
- Documentación de Apple StoreKit – Guías oficiales para iOS y Mac Catalyst.
- Compras In-App de Microsoft Store – Información sobre la monetización en Windows.
- Documentación de .NET MAUI – Todo lo que necesitas saber sobre el framework.
Esperamos sinceramente que este completo ejemplo te sea de gran utilidad para implementar compras dentro de la aplicación en tus proyectos .NET MAUI. Tu feedback y preguntas son siempre bienvenidos en la sección de comentarios. ¡Feliz codificación!
