Effectuer des achats dans une application mobile avec le SDK iOS
Afficher des paywalls dans votre application mobile est une étape essentielle pour offrir aux utilisateurs l’accès à des contenus ou services premium. Cependant, afficher ces paywalls suffit à gérer les achats uniquement si vous utilisez le Paywall Builder pour les personnaliser.
Si vous n’utilisez pas le Paywall Builder, vous devez recourir à une méthode distincte appelée .makePurchase() pour finaliser un achat et débloquer le contenu souhaité. Cette méthode constitue le point d’entrée permettant aux utilisateurs d’interagir avec les paywalls et de mener à bien leurs transactions.
Si votre paywall comporte une offre promotionnelle active pour le produit qu’un utilisateur tente d’acheter, Adapty l’appliquera automatiquement au moment de l’achat.
Gardez à l’esprit que l’offre de lancement ne sera appliquée automatiquement que si vous utilisez des paywalls configurés avec le Paywall Builder.
Dans les autres cas, vous devrez vérifier l’éligibilité de l’utilisateur à une offre de lancement sur iOS. Ignorer cette étape peut entraîner le rejet de votre application lors de la publication. De plus, cela pourrait conduire à facturer le plein tarif à des utilisateurs éligibles à une offre de lancement.
Assurez-vous d’avoir effectué la configuration initiale sans sauter une seule étape. Sans cela, nous ne pouvons pas valider les achats.
Effectuer un achat
Vous utilisez Paywall Builder ? Les achats sont traités automatiquement — vous pouvez ignorer cette étape.
Vous cherchez un guide pas à pas ? Consultez le guide de démarrage rapide pour des instructions d’implémentation complètes avec tout le contexte nécessaire.
Paramètres de la requête :
| Paramètre | Présence | Description |
|---|---|---|
| Product | obligatoire | Un objet AdaptyPaywallProduct récupéré depuis le paywall. |
Paramètres de la réponse :
| Paramètre | Description |
|---|---|
| Profile | Si la requête a réussi, la réponse contient cet objet. Un objet AdaptyProfile fournit des informations complètes sur les niveaux d’accès, les abonnements et les achats uniques d’un utilisateur dans l’application. Vérifiez le statut du niveau d’accès pour déterminer si l’utilisateur dispose des accès requis dans l’application. |
Remarque : si vous utilisez encore une version d’Apple StoreKit inférieure à v2.0 et une version du SDK Adapty inférieure à v2.9.0, vous devez fournir le secret partagé de l’App Store Apple à la place. Cette méthode est actuellement dépréciée par Apple.
Achats intégrés depuis l’App Store
Lorsqu’un utilisateur initie un achat dans l’App Store et que la transaction est transmise à votre application, le SDK appelle la méthode delegate didReceivePromotedPurchase avec un objet AdaptyPromotedProduct. Vous avez deux options :
- Traiter la transaction immédiatement : Ne pas implémenter
didReceivePromotedPurchase. L’implémentation par défaut démarre l’achat immédiatement et l’écran du système d’achat Apple s’affiche automatiquement. - Stocker l’objet produit pour un traitement ultérieur : Implémenter
didReceivePromotedPurchase, stocker le produit, puis appelermakePurchaseavec le produit stocké plus tard. Cela peut être utile si vous devez afficher quelque chose de personnalisé à votre utilisateur avant de déclencher un achat.
Si le produit mis en avant comporte une offre d’abonnement, le SDK l’applique automatiquement à l’achat. L’offre est lue depuis l’intention d’achat App Store, qui l’expose sur iOS 18.0 et versions ultérieures. Sur iOS 16.4–17.x, subscriptionOffer vaut toujours nil et l’achat s’effectue au prix de base.
Voici l’extrait complet :
final class YourAdaptyDelegateImplementation: AdaptyDelegate {
// 1. Store the product object to defer the transaction.
// To process the transaction immediately instead, don't implement this method —
// the default implementation starts the purchase right away.
nonisolated func didReceivePromotedPurchase(_ product: AdaptyPromotedProduct) {
// store the product object
}
// 2. Continue the deferred purchase later on by passing the product to `makePurchase` when the timing is appropriate
func continueDeferredPurchase() async {
let storedProduct: AdaptyPromotedProduct = // get the product object from 1.
do {
let purchaseResult = try await Adapty.makePurchase(product: storedProduct)
// process the purchase result
} catch {
// handle the error
}
}
}
L’API didReceivePromotedPurchase est disponible à partir de la version 4.1 du SDK et nécessite iOS 16.4 ou une version ultérieure. La version 4.0 du SDK ne prend pas du tout en charge les achats intégrés promus, et sur les appareils antérieurs à iOS 16.4, la méthode ne se déclenche jamais. Si vous avez besoin des achats promus sur des versions iOS antérieures, restez sur le SDK 3.x et utilisez shouldAddStorePayment comme indiqué ci-dessous.
Vous utilisez le SDK Adapty 3.x ?
Dans le SDK 3.x, le SDK appelle la méthode déléguée shouldAddStorePayment à la place :
- Traiter la transaction immédiatement : Retournez
truedansshouldAddStorePayment. L’écran d’achat Apple s’affichera aussitôt. - Stocker l’objet produit pour un traitement ultérieur : Retournez
falsedansshouldAddStorePayment, puis appelezmakePurchaseavec le produit stocké plus tard.
final class YourAdaptyDelegateImplementation: AdaptyDelegate {
nonisolated func shouldAddStorePayment(for product: AdaptyDeferredProduct) -> Bool {
// 1a.
// Return `true` to continue the transaction in your app. The Apple purchase system screen will show automatically.
// 1b.
// Store the product object and return `false` to defer or cancel the transaction.
false
}
// 2. Continue the deferred purchase later on by passing the product to `makePurchase` when the timing is appropriate
func continueDeferredPurchase() async {
let storedProduct: AdaptyDeferredProduct = // get the product object from 1b.
do {
try await Adapty.makePurchase(product: storedProduct)
} catch {
// handle the error
}
}
} Utiliser les codes de promotion sur iOS
À propos des codes d’offre
Les codes d’offre vous permettent d’accorder des remises ou des essais gratuits à des utilisateurs spécifiques. Contrairement aux offres classiques appliquées automatiquement, les codes d’offre sont distribués en dehors de l’application — par e-mail, réseaux sociaux ou supports imprimés. Les utilisateurs les échangent en saisissant le code dans l’App Store, en suivant une URL de remboursement ou via une boîte de dialogue intégrée à l’application.
Pour configurer des codes d’offre, ouvrez un abonnement dans App Store Connect et accédez à sa section Offer Codes. Vous pouvez créer trois types de codes d’offre :
- Free — l’abonnement est gratuit pendant une durée définie, puis le renouvellement suivant s’effectue au plein tarif.
- Pay as you go — l’utilisateur paie un prix réduit à chaque cycle de facturation pendant une durée définie, puis l’abonnement se renouvelle au plein tarif.
- Pay up front — l’utilisateur paie un prix réduit unique pour toute la durée de l’offre, puis l’abonnement se renouvelle au plein tarif.
Il n’est pas nécessaire d’ajouter des codes d’offre à Adapty. Apple associe chaque transaction pendant la période d’offre à la catégorie du code d’offre. Cela inclut l’échange initial et tous les renouvellements à prix réduit qui suivent. Adapty détecte ce marqueur et enregistre chaque transaction avec la catégorie d’offre offer_code. Une fois la période d’offre terminée et l’abonnement renouvelé au plein tarif, le marqueur n’est plus présent. Vous pouvez filtrer les analytics par le type d’offre Offer Code dans l’Adapty Dashboard.
Résolution des écarts de revenus
Si vous constatez qu’une transaction liée à un code d’offre apparaît dans Adapty au prix plein du produit au lieu du prix réduit, vérifiez les points suivants dans App Store Connect :
- Le code d’offre dispose d’une tarification correctement configurée pour toutes les régions où les utilisateurs peuvent l’échanger.
- Le prix de l’offre est défini pour le pays ou la région spécifique de l’utilisateur. Apple envoie le prix régional dans la transaction. Si aucun prix régional n’est configuré pour l’offre, Apple peut envoyer le prix plein du produit à la place.
Vous pouvez filtrer et vérifier les transactions liées aux codes d’offre dans l’Adapty Dashboard grâce aux filtres Offer Code et Offer Discount Type.
Anciens codes promo (obsolètes)
Apple a abandonné les codes promo pour les achats intégrés en mars 2026. Les codes d’offre les remplacent avec davantage de fonctionnalités : critères d’éligibilité configurables, dates d’expiration et jusqu’à 1 million de codes par trimestre. Si vous utilisiez auparavant des codes promo pour les achats intégrés, passez aux codes d’offre dans App Store Connect.
Les anciens codes promo (limités à 100 par application et par version) accordaient un accès gratuit à un abonnement. Contrairement aux codes d’offre, Apple n’incluait pas les informations de remise dans les transactions de codes promo — il envoyait le prix plein du produit dans le reçu. Par conséquent, Adapty enregistrait ces transactions au prix plein, ce qui provoquait des écarts de revenus entre les analytics Adapty et App Store Connect.
Si vous constatez des transactions historiques au prix plein qui auraient dû être gratuites, il s’agit probablement d’anciens codes promo. Ces codes étant désormais obsolètes, passez aux codes d’offre pour un suivi précis des revenus.
Pour afficher la feuille de rachat de codes dans votre app :
Adapty.presentCodeRedemptionSheet()
D’après nos observations, la feuille de rachat de codes de promotion peut ne pas fonctionner de manière fiable dans certaines apps. Nous recommandons de rediriger directement l’utilisateur vers l’App Store.
Pour ce faire, vous devez ouvrir l’URL au format suivant :
https://apps.apple.com/redeem?ctx=offercodes&id={apple_app_id}&code={code}