Passer au contenu

Créer un groupe d'abonnement iOS

GitHub

Les groupes d'abonnements sont essentiels pour organiser et gérer plusieurs niveaux d'abonnement dans votre application iOS. Comprendre comment ils fonctionnent est crucial pour mettre en œuvre la fonctionnalité d'amélioration, de dégradation et de croisage.

Qu'est-ce qu'un Groupe d'Abonnements ?

Sous-titre « Qu'est-ce qu'un Groupe d'Abonnements ? »

Un groupe d'abonnements est une collection de souscriptions liées que les utilisateurs peuvent choisir entre. Les utilisateurs ne peuvent s'abonner qu'à une souscription au sein d'un groupe à la fois. Lorsqu'ils changent de souscription, Apple gère la transition automatiquement.

Pourquoi les Groupes d'Abonnements sont-ils importants ?

Sous-titre « Pourquoi les Groupes d'Abonnements sont-ils importants ? »

Les groupes d'abonnements permettent :

  • Tarification échelonnéeProposez des plans de base, premium et ultime
  • Diverses durées: Options mensuels, annuels et à vie
  • Logique d'amélioration/affaiblissement: Gestion automatique des changements de souscription
  • Gestion simplifiée: Grouper les souscriptions liées ensemble

Dans un groupe, chaque souscription doit être classée par ordre décroissant de valeur (niveau 1) à la valeur la plus faible. Cette classification détermine comment les changements de souscription sont classés :

Hiérarchie de groupe de souscription

Niveau 1 (Valeur la plus élevée)

  • Abonnement annuel Premium (99,99 €/an)
  • Abonnement mensuel Ultimate (19,99 €/mois)

Niveau 2 (Valeur moyenne)

  • Abonnement annuel Standard (49,99 €/an)
  • Abonnement mensuel Premium (9,99 €/mois)

Niveau 3 (Valeur la plus basse)

  • Abonnement annuel de base (29,99 €/an)
  • Abonnement mensuel Standard (4,99 €/mois)

Apple gère automatiquement trois types de changements de souscription en fonction du niveau de classement :

Passage à un abonnement de niveau supérieur (par exemple, niveau 2 → niveau 1). Comportement :

Prend effet

  • immédiatement L'utilisateur reçoit
  • un remboursement partiel proratisé pour le temps restant
  • La nouvelle souscription commence immédiatement

Exemple :

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

Passer à un abonnement de niveau inférieur (par exemple, niveau 1 → niveau 2). Comportement :

Prend effet à la

  • prochaine date de renouvellement next renewal date
  • L'utilisateur conserve sa souscription actuelle jusqu'à la fin de la période
  • Une nouvelle souscription commence automatiquement après expiration

Exemple :

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

Passer à une autre souscription au même niveau de tarification.

Le comportement dépend de la durée :

Durée différente → Comporte le comportement d'une désinscription

  • Prend effet à la date de renouvellement suivante
  • Exemple : Abonnement mensuel Premium (Niveau 1) → Abonnement annuel Premium (Niveau 1)

Même Durée → Comporte les mêmes caractéristiques que mise à niveau

  • Prend effet immédiatement
  • Exemple : Abonnement mensuel Premium (Niveau 1) → Abonnement mensuel Ultimate (Niveau 1)
  1. Naviguer vers les abonnements

    Dans App Store Connect, sélectionnez votre application et allez à Monétiser > Abonnements.

  2. Créer un groupe

    Cliquez + sur « Groupe d'abonnements » pour créer un nouveau groupe.

  3. Nommer le Groupe

    Choisissez un nom descriptif qui reflète les abonnements qu'il contient :

    • « Accès Premium »
    • « Plans de stockage Cloud »
    • « Fonctionnalités Pro »
  4. Ajouter des abonnements

    Après avoir créé le groupe, ajoutez des abonnements individuels à celui-ci. Chaque abonnement aura un niveau de classement.

  5. Définir les classements de niveau

    Organisez les abonnements du plus élevé (1) au plus bas. Considérez :

    • Les plans annuels sont généralement classés en haut des plans mensuels
    • Les niveaux de tarification plus élevés sont classés au-dessus des niveaux de tarification moins élevés
    • Les niveaux ultimes/premières classent le plus haut

Le plugin native-purchases gère automatiquement la logique de groupe d'abonnements :

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();
}
});

Assurez-vous de communiquer clairement le comportement de changement :

Pour les mises à jour :

« Vous obtiendrez un accès immédiat aux fonctionnalités Premium. Nous proratiserons votre abonnement actuel. »

Pour les dégradations :

« Vous conserverez l'accès Premium jusqu'à la date de renouvellement, puis vous passerez à Standard. »

Pour les croisades :

« Votre plan changera à la facturation annuelle à la prochaine renouvellement le [date]. »

Utilisez les notifications de serveur d'App Store v2 de Apple ou votre propre backend de validation de récépissé pour refléter les modifications de StoreKit dans votre base de données. Associez les notifications de serveur avec le transactionUpdated listener afin que le client et le serveur restent synchronisés.

  • Conservez les abonnements liés dans le même groupe
  • N'associez pas des fonctionnalités non liées (par exemple, le stockage et la suppression des publicités)
  • Créez des groupes séparés pour différents ensembles de fonctionnalités
  • Plans annuels → Niveau supérieur que les plans mensuels (pour le même niveau)
  • Niveaux de tarification plus élevés → Niveau supérieur
  • Prenez en compte la valeur, et non seulement le prix
  • Affichez clairement la souscription actuelle
  • Affichez toutes les options disponibles dans le groupe
  • Indiquez les changements qui sont immédiats par rapport à la renouvellement
  • Permettre un changement facile entre les plans
  • Testez tous les scénarios de mise à niveau
  • Testez tous les scénarios de dégradation
  • Vérifiez le comportement de croisage
  • Vérifiez si le webhook est activé
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Basic → Premium : Mise à niveau (immédiate)
  • Premium → Ultimate : Mise à niveau (immédiate)
  • Ultimate → Premium : Degrader (à la renouvellement)
  • Basic → Ultimate : Mise à niveau (immédiate)
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Mois → Annuel : Bascule (à la renouvellement)
  • Annuel → Mois : Degrader (à la renouvellement)
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)

Cet arrangement offre la plus grande flexibilité tout en maintenant une logique d'amélioration/diminution claire.

Résolution de problèmes

context

Page/zone : Support / support premium page ou section de support du pied de page. Rôle : En-tête de section ou de page. Vu dans : page support-policy.astro. Message clé `support_policy_troubleshooting_title` (Titre de la politique de support - Résolution de problèmes).

  • Section intitulée « Résolution de problèmes »
  • Abonnement ne s'affiche pas dans le groupe :
  • Vérifiez que l'ID du produit est correct

Comportement de mise à niveau/revendication incorrect :

  • Révisez les classements de niveau (1 = niveau le plus élevé)
  • Vérifiez que les niveaux de souscription ont du sens
  • Vérifiez que les niveaux sont correctement configurés

Produits provenant de différents groupes :

  • Les utilisateurs peuvent s'abonner à plusieurs groupes simultanément
  • Cela est intentionnel - gardez les produits liés dans le même groupe

getActiveProducts montrant plusieurs abonnements :

  • Vérifiez si les abonnements se trouvent dans différents groupes
  • Vérifiez que l'utilisateur n'est pas abonné via la Partage de famille
  • Révisez l'état de la souscription dans App Store Connect

Pour plus de détails, consultez la documentation officielle d'Apple sur les groupes de souscriptions.

Continuez de la section Créer un groupe de souscription iOS

Section intitulée « Continuez de la section Créer un groupe de souscription iOS »

Si vous utilisez Créer un groupe de souscription iOS pour planifier l'approbation et la distribution dans les magasins, connectez-l’avec En utilisant @capgo/achats-natifs pour la capacité native dans En utilisant @capgo/achats-natifs, @capgo/capacitor-avis-de-l'utilisateur pour les détails d'implémentation dans @capgo/capacitor-examen-intérieur-de-l'application, En utilisant @capgo/capacitor-examen-intérieur-de-l'application pour la capacité native dans En utilisant @capgo/capacitor-examen-intérieur-de-l'application, @capgo/capacitor-marché-natif pour les détails d'implémentation dans @capgo/capacitor-marché-natif, et En utilisant @capgo/capacitor-marché-natif pour la capacité native dans En utilisant @capgo/capacitor-marché-natif.