Configurer un abonnement mensuel avec engagement de 12 mois
Pour proposer un plan d’engagement, vous avez besoin d’un abonnement App Store annuel et d’un flow ou d’un paywall personnalisé. Les flows nécessitent le SDK Adapty v4.3.1 ou ultérieur sur iOS, v4.3 ou ultérieur sur Android, et v4.3.0 ou ultérieur sur React Native ou Flutter. Les paywalls personnalisés nécessitent le SDK Adapty v4.3 ou ultérieur sur iOS, React Native ou Flutter.
Pour que les abonnés s’engagent sur une année complète et paient mensuellement, ajoutez un plan d’engagement de 12 mois à votre produit annuel dans App Store Connect et dans Adapty.
Avant de commencer
Avant d’implémenter les plans d’engagement, assurez-vous de :
- Ciblez le bon marché : Les plans d’engagement ne sont pas disponibles aux États-Unis. En Allemagne, en Israël, en Afrique du Sud et en Türkiye, les abonnés peuvent annuler avec effet immédiat via le support Apple.
- Ciblez la bonne version d’OS : Les abonnés doivent disposer d’iOS 26.4 ou version ultérieure, ou de la même version d’iPadOS, macOS, tvOS ou visionOS. Compilez votre application avec Xcode 26.5 ou version ultérieure.
- Ciblez la bonne fourchette de prix : La somme des 12 paiements mensuels doit représenter entre 1x et 1,5x la valeur de l’abonnement annuel en paiement unique.
- Utilisez une version compatible du SDK Adapty : Les flows nécessitent le SDK Adapty v4.3.1 ou ultérieur sur iOS, v4.3 ou ultérieur sur Android, et v4.3.0 ou ultérieur sur React Native ou Flutter. Les paywalls personnalisées nécessitent le SDK Adapty v4.3 ou ultérieur sur iOS, React Native ou Flutter : dans les versions de l’application utilisant un SDK antérieur, les utilisateurs ne peuvent acheter que le plan en paiement unique.
- Mettez à jour le code qui lit les identifiants de produits : Les webhooks, les intégrations, les exports de données et l’API côté serveur signalent les achats de plans d’engagement sous la forme
<product_id>:monthly. Si votre code traite des identifiants de produits, mettez à jour la logique avant le premier achat de plan d’engagement.
1. Configuration d’App Store Connect
- Ouvrez un abonnement annuel dans App Store Connect, ou créez un nouvel abonnement avec une durée de 1 an.
- Dans la section Availability, ajoutez les mêmes pays sous 1 Year Upfront et sous Monthly with 12-Month Commitment. Apple ne propose la facturation par engagement que là où la facturation anticipée est disponible. L’inverse n’est pas obligatoire : vous pouvez proposer le forfait anticipé dans des pays sans le forfait par engagement.
- Dans la section Subscription Prices, définissez le prix anticipé pour votre territoire de base, si l’abonnement n’en a pas encore. Apple exige le prix anticipé même si vous n’affichez que le forfait par engagement aux utilisateurs.
- Définissez le prix mensuel pour votre territoire de base. Le prix mensuel doit représenter entre 1/12 et 1/8 du prix anticipé. Par exemple, avec un prix anticipé de 59,99 €, le prix mensuel peut être compris entre 5,00 € et 7,49 €.
App Store Connect calcule les prix des autres pays à partir des prix de votre territoire de base.
Pour des instructions complètes, suivez le guide Apple sur la souscription mensuelle avec engagement de 12 mois.
2. Configuration Adapty
Pour afficher le plan d’engagement dans les flows ou les paywalls personnalisés, activez-le pour le produit annuel dans Adapty. Si vous n’utilisez ni l’un ni l’autre, vous pouvez ignorer cette étape.
-
Ouvrez le produit annuel. S’il n’existe pas encore, créez-le et connectez-le à l’abonnement que vous avez configuré dans App Store Connect. Ne publiez pas un nouveau produit depuis Adapty : cela créerait un abonnement distinct sans le plan d’engagement.
-
Ouvrez l’onglet App Store, puis sélectionnez Offer monthly payments with a 12-month commitment.
-
Dans la fenêtre contextuelle, dans la liste Monthly price, USD, sélectionnez le prix d’acompte correspondant à App Store Connect. La liste contient uniquement les tarifs App Store dans la plage autorisée. Ce prix est une valeur de référence : Adapty ne l’envoie pas à App Store Connect.
3. Configurer les offres
Dans App Store Connect, chaque formule de facturation possède ses propres offres de lancement, offres promotionnelles, offres de reconquête et codes de réduction. Une offre associée à la formule de paiement immédiat ne s’applique pas à la formule avec engagement.
- Essais gratuits et autres offres de lancement : dans App Store Connect, configurez l’offre pour le plan d’engagement. Adapty applique les offres de lancement automatiquement. Lorsqu’une offre de lancement se termine, l’abonnement de 12 mois de l’abonné commence.
- Offres promotionnelles et offres de reconquête : configurez des offres promotionnelles ou des offres de reconquête pour le plan d’engagement dans App Store Connect. Ensuite, ajoutez les offres dans Adapty et définissez leur App Store plan sur Monthly with 12-month commitment. Un flow ou un paywall ne liste que les offres correspondant à son propre plan de facturation. Si vous n’utilisez ni flow ni paywall personnalisé, vous n’avez pas besoin d’ajouter les offres dans Adapty.
- Codes d’offre : configurez des codes d’offre pour le plan d’engagement dans App Store Connect.
4. Ajouter à un flow ou à un paywall personnalisé
Apple exige que vous affichiez à la fois le prix mensuel de chaque versement et le total annuel avant l’achat.
Flow
- Dans le flow builder, ouvrez le panneau Products, et ajoutez le produit annuel tagué Monthly à l’écran. Pour vendre également le plan anticipé sur le même écran, ajoutez aussi le produit tagué Upfront.
- Pour proposer une offre anticipée aux utilisateurs qui achètent le plan anticipé à la place — sur une version antérieure du SDK, ou lorsque le plan d’engagement ne s’applique pas — sélectionnez-la sous Fallback offer.
- Assignez le produit Monthly à une carte produit ou à une action Purchase.
- Pour afficher le prix par versement, insérez les variables
prod_billing_priceetprod_billing_period. Pour afficher le total annuel, insérezprod_price. Les variables de versement nécessitent Adapty SDK v4.3.1 ou ultérieur sur iOS, ou v4.3.0 ou ultérieur sur React Native ou Flutter. - Pour prévisualiser l’écran pour les utilisateurs qui ne peuvent pas acheter le plan d’engagement, dans le panneau Products, ouvrez le menu du produit Monthly, et sélectionnez Offer > Monthly plan unavailable.
Paywall personnalisé
- Dans le paywall personnalisé, ajoutez le produit annuel et définissez son Billing plan sur Monthly. Pour vendre également le plan prépayé sur le même paywall, ajoutez à nouveau le produit annuel avec le Billing plan Upfront.
- Pour proposer une offre prépayée aux utilisateurs qui achètent le plan prépayé à la place — sur une version antérieure du SDK, ou lorsque le plan d’engagement ne s’applique pas — sélectionnez-la sous Fallback offer.
- Dans votre application, affichez le prix depuis
product.subscriptionPricingTerms. Pour les utilisateurs pouvant acheter le plan d’engagement, le SDK Adapty retourne sa tarification. Pour tous les autres, le SDK retourne la tarification du plan prépayé :- Pour savoir quel plan le SDK a retourné, vérifiez
product.subscriptionPricingTerms?.billingPlan. La valeur est.monthlypour le plan d’engagement et.upFrontpour le plan prépayé. - Pour afficher le prix par versement, utilisez
subscriptionPricingTerms.localizedBillingPriceetsubscriptionPricingTerms.billingPeriod. - Pour afficher le total annuel, utilisez
subscriptionPricingTerms.commitmentInfo.localizedPriceetsubscriptionPricingTerms.commitmentInfo.period. Pour le plan d’engagement,product.localizedPriceetproduct.subscriptionPeriodretournent les mêmes valeurs annuelles. - Dans React Native, lisez la tarification depuis
product.subscription?.ios?.pricingTerms. SonbillingPlanest'monthly'pour le plan d’engagement et'up_front'pour le plan prépayé. Pour le prix par versement, utilisezbillingPrice.localizedStringetbillingPeriod. Pour le total annuel, utilisezcommitmentInfo.price.localizedStringetcommitmentInfo.period. - Dans Flutter, lisez la tarification depuis
product.subscription?.pricingTerms. SonbillingPlanestAdaptySubscriptionBillingPlan.monthlypour le plan d’engagement etAdaptySubscriptionBillingPlan.upFrontpour le plan prépayé. Pour le prix par versement, utilisezbillingPrice.localizedStringetbillingPeriod. Pour le total annuel, utilisezcommitmentInfo.price.localizedStringetcommitmentInfo.period.
- Pour savoir quel plan le SDK a retourné, vérifiez
Les utilisateurs ne peuvent pas acheter le plan d’engagement dans les cas suivants :
- Version de l’OS ou pays non pris en charge : l’appareil Apple de l’utilisateur utilise une version système antérieure à 26.4, ou le plan n’est pas disponible dans le pays de son App Store. Le SDK Adapty retourne alors le prix du plan initial à la place.
- Abonnement initial existant : StoreKit signale que l’utilisateur est déjà abonné. Pour changer de plan, les abonnés passent par leurs réglages d’abonnement Apple.
- Achat intégré promu : l’utilisateur sélectionne le produit dans l’App Store, puis le SDK Adapty démarre l’achat dans votre application. Pour ces achats, le SDK ne prend en charge que le plan initial.
Pour arrêter de proposer le plan d’engagement, dans vos flows, remplacez ou supprimez le produit Monthly. Dans vos paywalls personnalisés, définissez le Billing plan du produit annuel sur Upfront, ou supprimez la ligne Monthly. Vous ne pouvez pas décocher la case Offer monthly payments with a 12-month commitment dans Adapty. Les abonnés actuels continuent de renouveler leur engagement chaque année, sauf si vous cliquez sur Remove Monthly Billing pour l’abonnement annuel dans App Store Connect. Les abonnés qui se sont déjà engagés continuent à payer jusqu’à la fin de leur engagement.
5. Tester le plan dans un sandbox
Suivez le guide de test en sandbox avec deux comptes sandbox :
- Un compte d’un pays où vous proposez le plan d’engagement : le paywall doit afficher le plan d’engagement avec le prix mensuel ainsi que le prix total. Après l’achat, le profil de l’utilisateur sandbox doit avoir le niveau d’accès du produit annuel.
- Un compte américain : le paywall ne doit afficher que le plan en paiement unique.
Si votre code traite des identifiants de produits provenant de webhooks ou de l’API côté serveur, vérifiez qu’il reçoit les achats de plans d’engagement sous la forme <product_id>:monthly.
Pour tester la logique d’achat en local, utilisez StoreKit Testing dans Xcode 26.5 ou version ultérieure. Les achats effectués dans StoreKit Testing n’atteignent pas Adapty.
Afficher la progression de l’engagement dans votre application
Pour montrer aux abonnés où ils en sont dans leur engagement, lisez le niveau d’accès depuis le profil de l’utilisateur. Ses propriétés billingPlan et commitmentInfo nécessitent le SDK Adapty v4.3 ou ultérieur sur iOS, ou v4.3.0 ou ultérieur sur React Native ou Flutter.
- Pour savoir si l’abonné est sur un plan d’engagement, comparez
billingPlanavec la valeur mensuelle. Ne vérifiez pas si la propriété est définie : elle peut aussi contenir la valeur initiale. - Pour afficher la progression, utilisez
commitmentInfo.billingPeriodNumberpour le paiement en cours etcommitmentInfo.totalBillingPeriodspour le nombre de paiements. - Pour afficher la date de fin de l’engagement, utilisez
commitmentInfo.expiresAt, et non la propriétéexpiresAtdu niveau d’accès.
Dépannage
- La case à cocher pour les paiements mensuels est absente : La case Offer monthly payments with a 12-month commitment n’apparaît que sur un produit Annual avec un App Store product ID. Elle reste inactive tant que le produit n’a pas de Price (USD).
- Les utilisateurs ne voient pas d’essai gratuit ni d’autre offre pour le plan avec engagement : Dans App Store Connect, chaque offre appartient à un plan de facturation. Configurez l’offre pour le plan avec engagement. Pour une offre promotionnelle ou de reconquête, définissez également l’App Store plan de l’offre dans Adapty sur Monthly with 12-month commitment.
- Tous les utilisateurs voient le prix total : Vérifiez les deux points suivants :
- L’app est compilée avec Xcode 26.5 ou une version ultérieure. Avec une version antérieure, le SDK Adapty retourne toujours la tarification du plan total.
- Dans le flow, l’écran utilise le produit annuel tagué Monthly. Dans le paywall personnalisé, le Billing plan du produit annuel est Monthly.
- Certains utilisateurs voient le prix total : Ces utilisateurs ne peuvent pas acheter le plan avec engagement.
- Le paywall affiche le total annuel au lieu du prix de l’échéance :
- Dans un flow,
prod_priceretourne le total annuel. Pour afficher le prix de l’échéance, utilisezprod_billing_price. Sur Adapty iOS SDK v4.3.0,prod_billing_priceaffiche également le total annuel : mettez à jour le SDK vers la v4.3.1 ou une version ultérieure. - Dans un paywall personnalisé,
product.localizedPriceretourne le total annuel. Pour afficher le prix de l’échéance, utilisezsubscriptionPricingTerms.localizedBillingPrice. En React Native, utilisezproduct.subscription?.ios?.pricingTerms?.billingPrice.localizedString. En Flutter, utilisezproduct.subscription?.pricingTerms?.billingPrice.localizedString.
- Dans un flow,