Tras la interrupción del popular InAppBillingPlugin, muchos desarrolladores de .NET MAUI han estado buscando orientación sobre cómo implementar compras dentro de la aplicación en sus proyectos. Hoy, nos complace presentar una muestra integral que demuestra cómo implementar un sistema de facturación multiplataforma para Android, iOS, Mac Catalyst y Windows, utilizando las APIs específicas de cada plataforma con una interfaz unificada.
Presentando la Muestra BillingService
Nuestra nueva muestra BillingService es una guía práctica sobre cómo integrar los sistemas de facturación nativos de cada plataforma en sus aplicaciones .NET MAUI. Esta muestra no solo aborda la funcionalidad central de las compras, sino que también enfatiza la importancia de mantener un código limpio y fácil de mantener a través de patrones de diseño probados como la inyección de dependencias y el patrón MVVM (Model-View-ViewModel). El enfoque de esta muestra garantiza que los desarrolladores puedan crear soluciones robustas y escalables.
La muestra incluye implementaciones completas y optimizadas para los siguientes sistemas operativos y sus respectivos APIs:
- Android: Integración con Google Play Billing Client v7, la última versión del cliente de facturación de Google Play, asegurando compatibilidad y acceso a las funciones más recientes.
- iOS & Mac Catalyst: Utiliza StoreKit, la API de Apple para compras dentro de la aplicación, proporcionando una experiencia de usuario fluida y consistente en dispositivos Apple.
- Windows: Se conecta con las APIs de Microsoft Store, permitiendo la monetización de aplicaciones dirigidas a la plataforma Windows.
Esta cobertura exhaustiva significa que los desarrolladores pueden escribir su lógica de negocio de facturación una sola vez y desplegarla en múltiples plataformas principales, reduciendo significativamente la complejidad y el tiempo de desarrollo.
Visión General de la Arquitectura
La muestra BillingService es un excelente ejemplo de cómo abordar el desarrollo multiplataforma de manera efectiva, demostrando varios patrones arquitectónicos clave que son fundamentales para construir aplicaciones .NET MAUI robustas y mantenibles.
Interfaz Unificada: IBillingService
El corazón de esta implementación es una interfaz clara y concisa, IBillingService. Esta interfaz actúa como una capa de abstracción, encapsulando todas las operaciones de facturación específicas de la plataforma detrás de un conjunto uniforme de métodos. Esto permite que la lógica de negocio de la aplicación interactúe con el servicio de facturación sin tener que conocer los detalles internos de cómo se maneja la facturación en Android, iOS o Windows.
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 IBillingService cumple una función específica:
InitializeAsync(): Prepara el servicio de facturación, realizando cualquier configuración o inicialización necesaria de la plataforma.GetProductsAsync(): Recupera una lista de productos disponibles para la compra desde la tienda de aplicaciones.PurchaseAsync(string productId): Inicia el proceso de compra para un producto específico, devolviendo el resultado de la transacción.RestorePurchasesAsync(): Permite a los usuarios restaurar sus compras previas, útil para transferir compras a un nuevo dispositivo o después de una reinstalación.IsProductOwned(string productId): Verifica si un producto específico ya ha sido comprado por el usuario.
Implementaciones Específicas de Plataforma
Para lograr la independencia de la plataforma, cada plataforma tiene su propio archivo de implementación que se encarga de interactuar con la API de facturación nativa correspondiente. Esto se gestiona eficientemente utilizando la compilación condicional, una característica poderosa en .NET que permite que diferentes bloques de código se compilen solo para plataformas específicas.
BillingService.Android.cs: Contiene la lógica detallada para integrar Google Play Billing.BillingService.iOS.cs: Implementa StoreKit para iOS y Mac Catalyst. Es importante destacar que iOS y Mac Catalyst comparten una única implementación, ya que ambos utilizan las APIs idénticas de StoreKit 1.BillingService.Windows.cs: Maneja la integración con las APIs de Microsoft Store.
El archivo de proyecto utiliza directivas de compilación condicional para incluir la implementación adecuada para cada plataforma de destino. Esto significa que cuando se compila para Android, solo se incluye el código de Android, y lo mismo ocurre para iOS/Mac Catalyst y Windows, lo que garantiza paquetes de aplicaciones ligeros y específicos para cada plataforma.
Inyección de Dependencias
La inyección de dependencias es un pilar central en la arquitectura del servicio de facturación. Se utiliza para registrar la interfaz IBillingService en MauiProgram.cs, permitiendo que el contenedor de DI de .NET MAUI resuelva automáticamente la implementación correcta y específica de la plataforma en tiempo de ejecución. Esto simplifica enormemente el acoplamiento y mejora la capacidad de prueba y el mantenimiento del código.
builder.Services.AddSingleton<IBillingService, Services.BillingService>();
builder.Services.AddTransient<ProductsViewModel>();
Al registrar IBillingService como un servicio Singleton, se garantiza que solo se cree una instancia del servicio de facturación durante la vida útil de la aplicación, lo que es eficiente en recursos. Además, la muestra registra ProductsViewModel como transitorio, lo que significa que se crea una nueva instancia cada vez que se solicita, adecuado para ViewModels que pueden tener un ciclo de vida más corto.
Una Nota sobre la Implementación de StoreKit
La implementación actual para iOS y Mac Catalyst en la muestra utiliza StoreKit 1. Es crucial entender que StoreKit 1 sigue siendo totalmente funcional y compatible con todas las versiones actuales y futuras predecibles de iOS, incluyendo iOS 18, iOS 26 y más allá. Por lo tanto, esta implementación es totalmente «production-ready» y puede utilizarse en sus aplicaciones hoy mismo sin preocupaciones inmediatas.
Sin embargo, en la WWDC 2024, Apple anunció la depreciación de StoreKit 1 en favor de StoreKit 2. StoreKit 2 trae consigo una serie de características mejoradas, APIs modernas centradas en Swift con soporte para async/await, y un enfoque más robusto para la gestión de transacciones y suscripciones. Si bien StoreKit 1 sigue funcionando, Apple ha indicado claramente que las futuras mejoras y nuevas funcionalidades serán exclusivas de StoreKit 2.
El equipo de .NET está trabajando activamente en la interoperabilidad de Swift para .NET. Una vez que el soporte completo para StoreKit 2 esté disponible en .NET para iOS, esta muestra se actualizará para incorporar las nuevas APIs. La migración a StoreKit 2 promete mejoras significativas como un manejo de transacciones superior, una gestión de suscripciones más avanzada y patrones asíncronos más modernos. Mientras tanto, las 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. Este paso es crucial para garantizar la seguridad de las transacciones y prevenir el fraude. La muestra BillingService se centra en los patrones de implementación del lado del cliente, por lo que la lógica del servidor deberá ser implementada por usted para sus requisitos específicos de producción.
Primeros Pasos
Para explorar la muestra y comprender cómo cada plataforma implementa la facturación, tiene varias opciones:
- Navegue por el código fuente completo en el repositorio de muestras de .NET MAUI en GitHub. Aquí encontrará todos los archivos y la estructura del proyecto.
- Consulte el navegador de muestras en línea para ver la muestra en acción y obtener una visión general rápida de sus funcionalidades.
- Clone el repositorio y ejecute la muestra en su máquina de desarrollo. Esta es la forma más práctica de experimentar el código de primera mano, depurarlo y adaptarlo a sus necesidades.
La muestra incluye una documentación README detallada con instrucciones de configuración específicas para cada plataforma, abarcando la Google Play Console, App Store Connect y el Microsoft Partner Center. Es vital seguir estas instrucciones para configurar correctamente los entornos de prueba.
Requisitos de Configuración
Antes de poder probar las compras dentro de la aplicación, deberá configurar sus productos en las consolas de desarrollador de cada plataforma. Este es un paso previo indispensable y varía significativamente entre Android, iOS y Windows.
- Android: Necesitará configurar sus productos en Google Play Console. Además, deberá configurar «probadores de licencias» para simular compras sin cargo real.
- iOS/Mac Catalyst: Deberá crear productos en App Store Connect. También es esencial configurar cuentas de probador de Sandbox para realizar pruebas de compra.
- Windows: Se requiere configurar complementos en Microsoft Partner Center y asociar su aplicación con la Tienda de Microsoft para habilitar la facturación.
Cada plataforma tiene sus propias particularidades y requisitos para las pruebas, y la documentación adjunta a la muestra proporciona una guía paso a paso para cada uno de estos procesos, asegurando que pueda poner en marcha su sistema de facturación sin contratiempos.
Aprenda Más
La muestra BillingService no es solo una implementación; es un recurso educativo que demuestra patrones y prácticas que puede adaptar para sus propias aplicaciones. Las lecciones clave que puede extraer incluyen:
- Cómo diseñar y crear una interfaz unificada para operaciones de facturación específicas de la plataforma.
- El uso adecuado de la compilación condicional para gestionar código específico de la plataforma de manera eficiente.
- La integración fluida con patrones de inyección de dependencias y MVVM para una arquitectura limpia.
- Estrategias efectivas para el manejo de errores y la provisión de retroalimentación al usuario durante las operaciones de facturación.
- Métodos y consideraciones para probar rigurosamente las compras dentro de la aplicación en diferentes entornos.
Le invitamos a visitar el navegador de muestras de .NET MAUI para explorar esta y muchas otras muestras que están diseñadas para ayudarle a construir mejores aplicaciones multiplataforma con .NET MAUI.
Recursos Adicionales
Para profundizar en el tema y obtener más información, consulte los siguientes recursos:
- BillingService Sample – Acceda al código fuente completo de la muestra.
- Google Play Billing Documentation – Documentación oficial para la facturación de Android.
- Apple StoreKit Documentation – Documentación oficial de StoreKit de Apple.
- Microsoft Store In-App Purchases – Guía sobre compras dentro de la aplicación en Microsoft Store.
- .NET MAUI Documentation – Documentación oficial completa de .NET MAUI.
Esperamos que esta muestra le sea de gran ayuda para implementar compras dentro de la aplicación en sus proyectos .NET MAUI. Comparta sus comentarios y preguntas en la sección de comentarios a continuación. Su feedback es valioso para la comunidad de desarrolladores.