Saltar al contenido

Crear Grupo de Suscripción iOS

GitHub

Los grupos de suscripción son fundamentales para organizar y gestionar múltiples niveles de suscripción en tu aplicación iOS. Comprender cómo funcionan es crucial para implementar la funcionalidad de actualización, desactualización y crossgrade.

Un grupo de suscripción es una colección de suscripciones relacionadas que los usuarios pueden elegir entre. Los usuarios solo pueden suscribirse a una suscripción dentro de un grupo a la vez. Cuando cambian de suscripción, Apple gestiona la transición automáticamente.

Los grupos de suscripción permiten:

  • Precios escalonados: Ofrecer planes básicos, premium y de máximo nivel
  • Diferentes duraciones: Opciones mensuales, anuales y de por vida
  • Lógica de actualización/descualificación: Manejo automático de cambios de suscripción
  • Gestión simplificada: Agrupa las suscripciones relacionadas

Dentro de un grupo, cada suscripción debe ser clasificada desde el valor más alto (nivel 1) hasta el valor más bajo. Esta clasificación determina cómo se clasifican los cambios de suscripción:

Jerarquía de grupos de suscripción

Nivel 1 (Valor más alto)

  • Suscripción anual Premium ($99,99/año)
  • Suscripción mensual Ultimate ($19,99/mes)

Nivel 2 (Valor medio)

  • Suscripción anual estándar ($49,99/año)
  • Suscripción mensual Premium ($9,99/mes)

Nivel 3 (Valor más bajo)

  • Suscripción anual básica ($29,99/año)
  • Suscripción mensual estándar ($4,99/mes)

Apple maneja automáticamente tres tipos de cambios de suscripción según el nivel de clasificación:

Cambiar a una suscripción de nivel superior (por ejemplo, nivel 2 → nivel 1). Comportamiento:

Tiene efecto

  • inmediatamente El usuario recibe
  • una devolución parcial refrendo para el tiempo restante
  • La nueva suscripción comienza de inmediato

Ejemplo:

// User currently has: Standard Monthly (Level 2)
// User upgrades to: Premium Annual (Level 1)
// Result: Immediate access to Premium, refund for unused Standard time

Pasando a un plan de suscripción de nivel inferior (por ejemplo, nivel 1 → nivel 2). Comportamiento:

Se aplica a partir de la

  • fecha de renovación siguiente next renewal date
  • Mantén la suscripción actual hasta que termine el período
  • La nueva suscripción comienza automáticamente después de la expiración

Ejemplo:

// User currently has: Premium Annual (Level 1)
// User downgrades to: Standard Monthly (Level 2)
// Result: Premium access continues until annual renewal date, then switches

Cambiar a otra suscripción a nivel de mismo nivel de tarifa.

El comportamiento depende de la duración:

Diferente Duración → Se comporta como una baja de categoría

  • Tiene efecto a la próxima fecha de renovación
  • Ejemplo: Mensual Premium (Nivel 1) → Anual Premium (Nivel 1)

Duración igual → Se comporta como actualización

  • Tiene efecto inmediatamente
  • Ejemplo: Mensual Premium (Nivel 1) → Mensual Último (Nivel 1)
  1. Navegue a Suscripciones

    En App Store Connect, seleccione su aplicación y vaya a Monetizar > Suscripciones.

  2. Crear Grupo

    Haga clic + al lado de ‘Grupos de Suscripción’ para crear un nuevo grupo.

  3. Nombrar el Grupo

    Elige un nombre descriptivo que refleje las suscripciones que contiene:

    • “Acceso Premium”
    • “Planes de Almacenamiento en la Nube”
    • “Características Pro”
  4. Agregar Suscripciones

    Después de crear el grupo, agrega suscripciones individuales a él. Cada suscripción tendrá un nivel de clasificación.

  5. Establecer Clasificaciones de Nivel

    Arregla las suscripciones de mayor valor (1) a menor valor. Considera:

    • Los planes anuales suelen tener un ranking más alto que los mensuales
    • Los niveles de precios más altos se clasifican por encima de los más bajos
    • Los niveles de precios máximos/premiun se clasifican en primer lugar

El plugin de compras nativas maneja automáticamente la lógica de grupo de suscripciones:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch all subscriptions in a group
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly', 'premium_annual', 'ultimate_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Display current subscription using StoreKit transactions
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSubs = purchases.filter((purchase) => purchase.isActive);
// Detect pending downgrade/cancellation (StoreKit sets willCancel === true)
const pendingChange = purchases.find((purchase) => purchase.willCancel === true);
if (pendingChange) {
console.log('Subscription will stop auto-renewing on', pendingChange.expirationDate);
}
// Purchase (StoreKit handles upgrades/downgrades automatically)
await NativePurchases.purchaseProduct({
productIdentifier: 'premium_annual',
productType: PURCHASE_TYPE.SUBS,
});
// Listen for StoreKit updates (fires on upgrades/downgrades/refunds)
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription updated:', transaction);
});
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Get current subscription info
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const currentSubscription = purchases.find(
(purchase) => purchase.subscriptionState === 'subscribed',
);
if (currentSubscription) {
// StoreKit reports if user cancelled auto-renew
if (currentSubscription.willCancel) {
console.log(
`User cancelled. Access remains until ${currentSubscription.expirationDate}`,
);
}
if (currentSubscription.isUpgraded) {
console.log('User recently upgraded to this plan.');
}
}
// Listen for automatic upgrades/downgrades
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription changed!', transaction);
if (transaction.subscriptionState === 'revoked') {
revokeAccess();
} else if (transaction.isActive) {
unlockPremiumFeatures();
}
});

Siempre comunica el comportamiento de cambio de manera clara:

Para actualizaciones:

“Obtendrá acceso inmediato a características Premium. Se le reajustará su suscripción actual.”

Para descuentos:

“Mantendrá acceso Premium hasta [fecha de renovación], luego cambiará a estándar.”

Para cambios de categoría:

“Su plan cambiará a facturación anual en la próxima renovación el [fecha].”

Utilice las notificaciones del servidor de App Store de Apple v2 o su propio backend de validación de recibos para reflejar los cambios de StoreKit en su base de datos. Asocie las notificaciones del servidor con el transactionUpdated escucha para que tanto el cliente como el backend se mantengan sincronizados.

  • Mantén las suscripciones relacionadas en el mismo grupo
  • No mezcles características no relacionadas (por ejemplo, almacenamiento y eliminación de anuncios)
  • Crea grupos separados para diferentes conjuntos de características
  • Planes anuales → Nivel superior que los mensuales (para la misma categoría)
  • Niveles de precios más altos → Nivel superior
  • Considerar valor, no solo precio
  • Mostrar la suscripción actual claramente
  • Mostrar todas las opciones disponibles en el grupo
  • Indicar qué cambios son inmediatos vs. a la renovación
  • Permitir cambiar fácilmente entre planes
  • Probar todos los escenarios de actualización
  • Probar todos los escenarios de descenso
  • Verificar el comportamiento de crossgrade
  • Ver disparo de webhook
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Basic → Premium: Actualizar (inmediato)
  • Premium → Ultimate: Actualizar (inmediato)
  • Ultimate → Premium: Descender (a la renovación)
  • Basic → Ultimate: Actualizar (inmediato)
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Mensual → Anual: Cambiar de categoría (al renovar)
  • Anual → Mensual: Descalificar (al renovar)
Level 1: Ultimate Annual ($199/year)
Level 2: Ultimate Monthly ($19.99/month)
Level 3: Premium Annual ($99/year)
Level 4: Premium Monthly ($9.99/month)
Level 5: Basic Annual ($49/year)
Level 6: Basic Monthly ($4.99/month)

Esta configuración proporciona la máxima flexibilidad mientras mantiene un lógica de actualización/descalificación clara.

La suscripción no aparece en el grupo:

  • Verifique que esté asignada al grupo correcto
  • Compruebe que esté en al menos el estado “Listo para enviar”
  • Asegúrese de que el ID del producto sea correcto

Comportamiento de actualización/descualificación incorrecto:

  • Revisar clasificaciones de nivel (1 = más alto)
  • Verifique que los niveles de suscripción tengan sentido
  • Verifique que los niveles estén configurados correctamente

Productos de diferentes grupos:

  • Los usuarios pueden suscribirse a múltiples grupos simultáneamente
  • Esto es intencional - mantenga los productos relacionados en el mismo grupo

getActiveProducts mostrando múltiples suscripciones:

  • Verifique si las suscripciones están en diferentes grupos
  • Verifique que el usuario no esté suscrito a través de Compartir Familia
  • Revisar el estado de la suscripción en App Store Connect

Para obtener más detalles, consulte la documentación oficial de Apple sobre grupos de suscripción.

Sigue adelante desde Crear Grupo de Suscripción iOS

Sección titulada “Sigue adelante desde Crear Grupo de Suscripción iOS”

Si está utilizando Crear Grupo de Suscripción iOS para planificar la aprobación de la tienda y la distribución, conecte Usando @capgo/compras nativas para la capacidad nativa en Usando @capgo/compras nativas, @capgo/capacitor-revisión en la aplicación para los detalles de implementación en @capgo/capacitor-revisión-en-aplicación, Usando @capgo/capacitor-revisión-en-aplicación para la capacidad nativa en Usando @capgo/capacitor-revisión-en-aplicación, @capgo/capacitor-mercado-nativo para los detalles de implementación en @capgo/capacitor-mercado-nativo, y Usando @capgo/capacitor-mercado-nativo para la capacidad nativa en Usando @capgo/capacitor-mercado-nativo.