Configurar un plan de compromiso de 12 meses
Para ofrecer un plan de compromiso, necesitas una suscripción anual de App Store y un flow o un paywall personalizado. Los flows requieren Adapty SDK v4.3.1 o posterior en iOS, v4.3 o posterior en Android, y v4.3.0 o posterior en React Native o Flutter. Los paywalls personalizados requieren Adapty SDK v4.3 o posterior en iOS, React Native o Flutter.
Para que los suscriptores se comprometan con un año completo y paguen mensualmente, añade un plan de compromiso de 12 meses a tu producto anual en App Store Connect y en Adapty.
Antes de empezar
Antes de implementar los planes de compromiso, asegúrate de que:
- Orienta al mercado adecuado: Los planes de compromiso no están disponibles en Estados Unidos. En Alemania, Israel, Sudáfrica y Türkiye, los suscriptores pueden cancelar con efecto inmediato a través del soporte de Apple.
- Orienta a la versión de SO correcta: Los suscriptores necesitan iOS 26.4 o posterior, o la misma versión de iPadOS, macOS, tvOS o visionOS. Compila tu app con Xcode 26.5 o posterior.
- Orienta al rango de precios adecuado: La suma de los 12 pagos mensuales debe estar entre 1x y 1,5x el valor de la suscripción anual anticipada.
- Usa una versión compatible del SDK de Adapty: Los flows necesitan el SDK de Adapty v4.3.1 o posterior en iOS, v4.3 o posterior en Android, y v4.3.0 o posterior en React Native o Flutter. Los paywalls personalizados necesitan el SDK de Adapty v4.3 o posterior en iOS, React Native o Flutter: en versiones de la app con un SDK anterior, los usuarios solo pueden comprar el plan anticipado.
- Actualiza el código que lee IDs de producto: Los webhooks, integraciones, exportaciones de datos y la API del lado del servidor reportan las compras de planes de compromiso como
<product_id>:monthly. Si tu código procesa IDs de producto, actualiza la lógica antes de la primera compra de un plan de compromiso.
1. Configuración de App Store Connect
- Abre una suscripción anual en App Store Connect, o crea una nueva suscripción con duración de 1 año.
- En la sección Availability, añade los mismos países en 1 Year Upfront y en Monthly with 12-Month Commitment. Apple solo ofrece facturación por compromiso donde la facturación por adelantado está disponible. Lo inverso no es obligatorio: puedes ofrecer el plan por adelantado en países sin el plan por compromiso.
- En la sección Subscription Prices, establece el precio por adelantado para tu territorio base si la suscripción aún no tiene uno. Apple requiere el precio por adelantado aunque solo muestres el plan por compromiso a los usuarios.
- Establece el precio mensual para tu territorio base. El precio mensual debe ser entre 1/12 y 1/8 del precio por adelantado. Por ejemplo, con un precio por adelantado de €59,99, el precio mensual puede ser de €5,00 a €7,49.
App Store Connect calcula los precios para el resto de países a partir de los precios de tu territorio base.
Para instrucciones completas, consulta la guía de Apple sobre cómo ofrecer suscripciones mensuales con un compromiso de 12 meses.
2. Configuración en Adapty
Para mostrar el plan de compromiso en flows o paywalls personalizados, actívalo para el producto anual en Adapty. Si no usas ninguno de los dos, puedes saltarte este paso.
-
Abre el producto anual. Si aún no existe, créalo y conéctalo a la suscripción que configuraste en App Store Connect. No crees un nuevo producto desde Adapty: eso generaría una suscripción independiente sin el plan de compromiso.
-
Abre la pestaña App Store y selecciona Offer monthly payments with a 12-month commitment.
-
En el pop-up, en la lista Monthly price, USD, selecciona el precio a plazos que coincida con App Store Connect. La lista solo contiene puntos de precio de App Store dentro del rango permitido. Este precio es un valor de referencia: Adapty no lo envía a App Store Connect.
3. Configura las ofertas
En App Store Connect, cada plan de facturación tiene sus propias ofertas introductorias, ofertas promocionales, ofertas de recuperación y códigos de oferta. Una oferta para el plan anticipado no se aplica al plan de compromiso.
- Pruebas gratuitas y otras ofertas introductorias: En App Store Connect, configura la oferta para el plan de compromiso. Adapty aplica las ofertas introductorias automáticamente. Cuando finaliza una oferta introductoria, comienza el compromiso de 12 meses del suscriptor.
- Ofertas promocionales y de recuperación: Configura las ofertas promocionales o las ofertas de recuperación para el plan de compromiso en App Store Connect. Luego añade las ofertas en Adapty y establece su App Store plan en Monthly with 12-month commitment. Un flow o un producto de paywall solo muestra las ofertas de su propio plan de facturación. Si no usas flows ni paywalls personalizados, no necesitas añadir las ofertas en Adapty.
- Códigos de oferta: Configura los códigos de oferta para el plan de compromiso en App Store Connect.
4. Añadir a un flow o paywall personalizado
Apple exige que muestres tanto el precio a plazos como el total anual antes de la compra.
Flow
- En el flow builder, abre el panel Products y añade el producto anual etiquetado como Monthly a la pantalla. Para vender también el plan de pago único en la misma pantalla, añade también el producto etiquetado como Upfront.
- Para ofrecer una oferta anticipada a los usuarios que compren el plan de pago único en lugar de este —en una versión anterior del SDK, o donde el plan de compromiso no aplique— selecciónala en Fallback offer.
- Asigna el producto Monthly a una tarjeta de producto o a una acción Purchase.
- Para mostrar el precio por cuota, inserta las variables
prod_billing_priceyprod_billing_period. Para mostrar el total anual, insertaprod_price. Las variables de cuota requieren Adapty SDK v4.3.1 o posterior en iOS, o v4.3.0 o posterior en React Native o Flutter. - Para previsualizar la pantalla para los usuarios que no pueden comprar el plan de compromiso, en el panel Products, abre el menú del producto Monthly y selecciona Offer > Monthly plan unavailable.
Paywall personalizado
- En el paywall personalizado, añade el producto anual y establece su Billing plan en Monthly. Para vender también el plan por adelantado en el mismo paywall, añade el producto anual de nuevo con el Upfront billing plan.
- Para ofrecer una oferta por adelantado a los usuarios que compren el plan por adelantado en su lugar — en una versión anterior del SDK, o donde el plan de compromiso no aplique — selecciónala en Fallback offer.
- En tu app, muestra el precio desde
product.subscriptionPricingTerms. Para los usuarios que pueden comprar el plan de compromiso, el SDK de Adapty devuelve su precio. Para todos los demás, el SDK devuelve el precio del plan por adelantado:- Para saber qué plan devolvió el SDK, comprueba
product.subscriptionPricingTerms?.billingPlan. El valor es.monthlypara el plan de compromiso y.upFrontpara el plan por adelantado. - Para mostrar el precio de la cuota, usa
subscriptionPricingTerms.localizedBillingPriceysubscriptionPricingTerms.billingPeriod. - Para mostrar el total anual, usa
subscriptionPricingTerms.commitmentInfo.localizedPriceysubscriptionPricingTerms.commitmentInfo.period. Para el plan de compromiso,product.localizedPriceyproduct.subscriptionPerioddevuelven los mismos valores anuales. - En React Native, lee el precio desde
product.subscription?.ios?.pricingTerms. SubillingPlanes'monthly'para el plan de compromiso y'up_front'para el plan por adelantado. Para el precio de la cuota, usabillingPrice.localizedStringybillingPeriod. Para el total anual, usacommitmentInfo.price.localizedStringycommitmentInfo.period. - En Flutter, lee el precio desde
product.subscription?.pricingTerms. SubillingPlanesAdaptySubscriptionBillingPlan.monthlypara el plan de compromiso yAdaptySubscriptionBillingPlan.upFrontpara el plan por adelantado. Para el precio de la cuota, usabillingPrice.localizedStringybillingPeriod. Para el total anual, usacommitmentInfo.price.localizedStringycommitmentInfo.period.
- Para saber qué plan devolvió el SDK, comprueba
Los usuarios no pueden comprar el plan de compromiso en los siguientes casos:
- Versión de SO o país no compatible: el dispositivo Apple del usuario tiene una versión del sistema anterior a la 26.4, o el plan no está disponible en su país de App Store. El SDK de Adapty devuelve el precio del plan inicial en su lugar.
- Suscripción inicial existente: StoreKit informa de que el usuario ya está suscrito. Para cambiar de plan, los suscriptores usan la configuración de suscripciones de Apple.
- Compra in-app promocionada: el usuario selecciona el producto en el App Store y, a continuación, el SDK de Adapty inicia la compra en tu app. Para estas compras, el SDK solo admite el plan inicial.
Para dejar de ofrecer el plan de compromiso, en tus flows, reemplaza o elimina el producto Monthly. En tus paywalls personalizados, establece el Billing plan del producto anual en Upfront, o elimina la fila Monthly. No puedes desmarcar la casilla Offer monthly payments with a 12-month commitment en Adapty. Los suscriptores actuales siguen renovando con un nuevo compromiso cada año, a menos que hagas clic en Remove Monthly Billing para la suscripción anual en App Store Connect. Los suscriptores que ya se comprometieron siguen pagando hasta que finalice su período de compromiso.
5. Prueba el plan en un sandbox
Sigue la guía de pruebas en sandbox con dos cuentas sandbox:
- Una cuenta de un país donde ofreces el plan de compromiso: El paywall debe mostrar el plan de compromiso con el precio mensual junto al precio total. Tras la compra, el perfil del usuario sandbox debe tener el nivel de acceso del producto anual.
- Una cuenta de EE. UU.: El paywall solo debe mostrar el plan por adelantado.
Si tu código procesa IDs de producto procedentes de webhooks o de la API server-side, verifica que recibe las compras de planes con compromiso como <product_id>:monthly.
Para probar la lógica de compra en local, utiliza StoreKit Testing en Xcode 26.5 o posterior. Las compras en StoreKit Testing no llegan a Adapty.
Muestra el progreso del compromiso en tu app
Para mostrar a los suscriptores qué tan avanzados están en su compromiso, lee el nivel de acceso desde el perfil del usuario. Sus propiedades billingPlan y commitmentInfo requieren Adapty SDK v4.3 o posterior en iOS, o v4.3.0 o posterior en React Native o Flutter.
- Para saber si el suscriptor está en el plan de compromiso, compara
billingPlancon el valor mensual. No compruebes si la propiedad está establecida: también puede contener el valor por adelantado. - Para mostrar el progreso, usa
commitmentInfo.billingPeriodNumberpara el pago actual ycommitmentInfo.totalBillingPeriodspara el número de pagos. - Para mostrar cuándo finaliza el compromiso, usa
commitmentInfo.expiresAt, no la propiedadexpiresAtdel nivel de acceso.
Solución de problemas
- Falta la casilla para pagos mensuales: La casilla Offer monthly payments with a 12-month commitment solo aparece en un producto Annual con un ID de producto de App Store. Permanece inactiva hasta que el producto tenga un Price (USD).
- Los usuarios no ven un período de prueba gratuito ni otra oferta para el plan de compromiso: En App Store Connect, cada oferta pertenece a un plan de facturación. Configura la oferta para el plan de compromiso. Para una oferta promocional o de recuperación, establece también el App Store plan de la oferta en Adapty como Monthly with 12-month commitment.
- Todos los usuarios ven el precio por adelantado: Verifica lo siguiente:
- La app está compilada con Xcode 26.5 o posterior. Con una versión anterior de Xcode, el SDK de Adapty siempre devuelve el precio del plan por adelantado.
- En el flow, la pantalla usa el producto anual etiquetado como Monthly. En el paywall personalizado, el Billing plan del producto anual es Monthly.
- Algunos usuarios ven el precio por adelantado: Esos usuarios no pueden comprar el plan de compromiso.
- El paywall muestra el total anual en lugar del precio de la cuota:
- En un flow,
prod_pricedevuelve el total anual. Para mostrar el precio de la cuota, usaprod_billing_price. En el SDK de Adapty para iOS v4.3.0,prod_billing_pricetambién muestra el total anual: actualiza el SDK a v4.3.1 o posterior. - En un paywall personalizado,
product.localizedPricedevuelve el total anual. Para mostrar el precio de la cuota, usasubscriptionPricingTerms.localizedBillingPrice. En React Native, usaproduct.subscription?.ios?.pricingTerms?.billingPrice.localizedString. En Flutter, usaproduct.subscription?.pricingTerms?.billingPrice.localizedString.
- En un flow,