Ofrecer una prueba gratuita es una excelente manera de alentar a los usuarios a probar las funciones premium de su aplicación, lo que aumenta las posibilidades de convertirlos en suscriptores de pago. Con StoreKit 2, Apple ha presentado herramientas mejoradas para ayudarlo a verificar la elegibilidad de un usuario para las ofertas de lanzamiento. En este artículo, lo guiaremos en la implementación de pruebas gratuitas en su aplicación, junto con fragmentos de código para verificar la elegibilidad del usuario. También cubriremos escenarios de prueba tanto para usuarios elegibles como para usuarios no elegibles. ¡Y asegúrese de estar atento a los " Consejos profesionales " dispersos a lo largo del artículo, donde comparto algunas ideas personales de mi experiencia!
Antes de comenzar a codificar, asegúrese de configurar los ajustes de compra dentro de la aplicación en App Store Connect:
Lo haré más sencillo mostrándole el fragmento de código para calcular la elegibilidad de prueba del usuario.
Cree una vista SwiftUI para mostrar la oferta de prueba gratuita y gestionar las interacciones de los usuarios. Dejaré muchos comentarios en el fragmento de código para guiarlo.
import StoreKit2 // StoreManager is responsible to communicate with Storekit Framework provided by Apple for monetization class StoreManager: ObservableObject { @Published var message: String = "" // We will use this property to display the right message to the user @Published var products: [Product] = [] // This will be responsible to store the products fetched that we defined // in App Store Connect // Fetch products from the App Store func fetchProducts() { Task { do { // product_id is the id that you would have defined in App Store Connect. let storeProducts = try await Product.products(for: ["product_id"]) products = storeProducts } catch { message = "Failed to fetch products: \(error.localizedDescription)" } } } // Initiate purchase func purchase() { guard let product = products.first else { // There is a possibility of products not being fetched from App Store Connect. // Pro Tip: From experience, even though we defined the products on App Store Connect, it is possible // that the products are not found post attempting to fetch. So, it is important to handle this case. message = "No product available." return } Task { do { let result = try await product.purchase() switch result { case .success(let verification): switch verification { case .verified: message = "Purchase successful!" case .unverified: message = "Could not verify the purchase." } case .userCancelled: message = "Purchase cancelled." case .pending: message = "Purchase is pending." @unknown default: message = "Unknown result." } } catch { message = "Purchase failed: \(error.localizedDescription)" } } } // Check if the user is eligible for a free trial func checkTrialEligibility() async -> Bool { guard let product = products.first else { return false } do { // So when you define a auto renewable subscriptions, there are usually bond in a group. The group can again be // found in App Store Connect let eligibility = try await product.subscription?.isEligibleForIntroOffer(for groupID: 111111) return eligibility ?? false } catch { message = "Error checking trial eligibility: \(error.localizedDescription)" return false } } }
import SwiftUI import StoreKit struct SubscriptionView: View { @StateObject private var storeManager = StoreManager() @State private var isEligibleForFreeTrial = false var body: some View { VStack { Text("Unlock Premium Features") .font(.title) .padding() Text("Get a 7-day free trial of our premium subscription.") .multilineTextAlignment(.center) .padding() Button(action: { storeManager.purchase() }) { // Based on user status, we can display the text Text(isEligibleForFreeTrial ? "Start Free Trial" : "Start Subscription") .bold() .frame(width: 200, height: 50) .background(Color.blue) .foregroundColor(.white) .cornerRadius(10) } Text(storeManager.message) .padding() } .onAppear { storeManager.fetchProducts() checkTrialEligibility() } } private func checkTrialEligibility() { Task { isEligibleForFreeTrial = await storeManager.checkTrialEligibility() } } }
Apple proporciona herramientas sólidas para probar diferentes estados de usuario (por ejemplo, elegible o no elegible para una prueba gratuita) utilizando StoreKit Testing en Xcode :
Vaya a Archivo > Nuevo > Archivo... > Archivo de configuración de StoreKit en Xcode.
Configure sus productos de suscripción, incluidos los períodos de prueba y los estados de elegibilidad.
Consejo profesional : también puedes crear un nuevo archivo de configuración para sincronizar el archivo de configuración desde App Store Connect y de esa manera no necesitarás configurar todos los productos.
Simular diferentes escenarios:
Elegible para prueba gratuita:
Para simular un usuario de prueba gratuito, asegúrese de no tener ninguna transacción en el administrador de transacciones.
Para ver el administrador de transacciones, vaya a Depurar → StoreKit → Administrar transacciones
No elegible para prueba gratuita:
Para simular que un usuario no es elegible para una prueba gratuita, puede agregar manualmente una suscripción desde el administrador de transacciones. Puede tocar el botón Agregar en la pantalla del administrador de transacciones y luego seleccionar la transacción que desea agregar. Aquí, estoy intentando configurar una suscripción mensual para el usuario. Después de agregar esa transacción y ejecutar la aplicación nuevamente, debería ver que la elegibilidad para la prueba está marcada como falsa.
Consejo profesional: También puedes incluir un UUID con la compra y usar este campo para almacenar el ID del usuario. De esta manera, puedes asegurarte de qué usuario realizó la compra en tu aplicación. Esta información se puede recuperar más tarde del historial de transacciones del usuario.
Las pruebas en Sandbox te permiten probar las compras y suscripciones dentro de la aplicación en un entorno que imita el entorno de producción de la App Store y, al mismo tiempo, te dan la libertad de simular un par de casos extremos, como compras interrumpidas, uso compartido familiar y simulación de compras realizadas fuera de la aplicación o en otro dispositivo. También te permite
Pero antes de nada, aquí se explica cómo configurar y utilizar las pruebas sandbox:
Crear una cuenta de probador de Sandbox:
Iniciar sesión con la cuenta de Sandbox Tester:
Ejecute su aplicación en modo Sandbox:
Pruebe diferentes escenarios:
Consejo profesional: Una cuenta de Apple no puede tener varias suscripciones activas, por lo que dos usuarios diferentes no pueden realizar compras independientes en la aplicación con el mismo ID de Apple. Asegúrate de comprobar si tu aplicación es compatible con este caso de usuario.
https://developer.apple.com/documentation/storekit
https://developer.apple.com/documentation/xcode/setting-up-storekit-testing-in-xcode/
https://developer.apple.com/app-store-connect/