---
title: "Activer les achats dans votre paywall personnalisé avec le SDK Kotlin Multiplatform"
description: "Intégrez le SDK Adapty dans vos paywalls Kotlin Multiplatform personnalisés pour activer les achats intégrés."
---

Ce guide explique comment intégrer Adapty dans vos paywalls personnalisés. Gardez le contrôle total sur l'implémentation du paywall, tandis que le SDK Adapty récupère les produits, gère les nouveaux achats et restaure les précédents. Ce guide utilise les APIs du SDK Adapty Kotlin Multiplatform v4 (bêta) — si vous utilisez la v3, consultez le [guide de migration](migration-to-kmp-sdk-v4) pour les noms de méthodes correspondants.

:::important
**Ce guide est destiné aux développeurs qui implémentent des paywalls personnalisés.** Si vous souhaitez la méthode la plus simple pour activer les achats, utilisez l'[Adapty Flow Builder](kmp-quickstart-paywalls). Avec le Flow Builder, vous créez des flows dans un éditeur visuel sans code, Adapty gère toute la logique d'achat automatiquement, et vous pouvez tester différentes conceptions sans republier votre application.
:::

## Avant de commencer \{#before-you-start\}

### Configurer les produits \{#set-up-products\}

Pour activer les achats intégrés, vous devez comprendre trois concepts clés :

- [**Produits**](product) – tout ce que les utilisateurs peuvent acheter (abonnements, consommables, accès à vie)
- [**Paywalls**](paywalls) – des configurations qui définissent quels produits proposer. Dans Adapty, les paywalls sont le seul moyen de récupérer des produits, mais cette conception vous permet de modifier les produits, les prix et les offres sans toucher au code de votre application. Dans le SDK v4, les variations de paywall pour un placement sont portées par un objet **flow** — vous récupérez un flow et interrogez ses produits.
- [**Placements**](placements) – où et quand vous affichez des paywalls dans votre application (comme `main`, `onboarding`, `settings`). Vous configurez des paywalls pour les placements dans le tableau de bord, puis vous les demandez par ID de placement dans votre code. Cela facilite l'exécution de tests A/B et l'affichage de paywalls différents à différents utilisateurs.

Assurez-vous de comprendre ces concepts même si vous travaillez avec votre paywall personnalisé. En résumé, ce sont simplement votre façon de gérer les produits que vous vendez dans votre application.

Pour implémenter votre paywall personnalisé, vous devrez créer un **paywall** et l'ajouter à un **placement**. Cette configuration vous permet de récupérer vos produits. Pour comprendre ce que vous devez faire dans le tableau de bord, suivez le guide de démarrage rapide [ici](quickstart).

### Gérer les utilisateurs \{#manage-users\}

Vous pouvez travailler avec ou sans authentification backend de votre côté.

Cependant, le SDK Adapty gère différemment les utilisateurs anonymes et identifiés. Lisez le [guide de démarrage rapide sur l'identification](kmp-quickstart-identify) pour comprendre les spécificités et vous assurer de travailler correctement avec les utilisateurs.

## Étape 1. Obtenir les produits \{#step-1-get-products\}

Pour récupérer les produits de votre paywall personnalisé, vous devez :

1. Obtenir l'objet `flow` en passant l'ID du [placement](placements) à la méthode `getFlow`.
2. Obtenir le tableau de produits pour ce flow à l'aide de la méthode `getPaywallProducts`.

```kotlin showLineNumbers

fun loadPaywall() {
    Adapty.getFlow(placementId = "YOUR_PLACEMENT_ID")
        .onSuccess { flow ->
            Adapty.getPaywallProducts(flow = flow)
                .onSuccess { products ->
                    // Use products to build your custom paywall UI
                }
                .onError { error ->
                    // Handle the error
                }
        }
        .onError { error ->
            // Handle the error
        }
}
```

## Étape 2. Accepter les achats \{#step-2-accept-purchases\}

Lorsqu'un utilisateur appuie sur un produit dans votre paywall personnalisé, appelez la méthode `makePurchase` avec le produit sélectionné. Cela gérera le flux d'achat et retournera le profil mis à jour.

```kotlin showLineNumbers

fun purchaseProduct(product: AdaptyPaywallProduct) {
    Adapty.makePurchase(product = product)
        .onSuccess { purchaseResult ->
            when (purchaseResult) {
                is AdaptyPurchaseResult.Success -> {
                    val profile = purchaseResult.profile
                    // Purchase successful, profile updated
                }
                is AdaptyPurchaseResult.UserCanceled -> {
                    // User canceled the purchase
                }
                is AdaptyPurchaseResult.Pending -> {
                    // Purchase is pending (e.g., user will pay offline with cash)
                }
            }
        }
        .onError { error ->
            // Handle the error
        }
}
```

## Étape 3. Restaurer les achats \{#step-3-restore-purchases\}

Les stores d'applications exigent que toutes les applications avec des abonnements fournissent un moyen aux utilisateurs de restaurer leurs achats.

Appelez la méthode `restorePurchases` lorsque l'utilisateur appuie sur le bouton de restauration. Cela synchronisera leur historique d'achats avec Adapty et retournera le profil mis à jour.

```kotlin showLineNumbers

fun restorePurchases() {
    Adapty.restorePurchases()
        .onSuccess { profile ->
            // Restore successful, profile updated
        }
        .onError { error ->
            // Handle the error
        }
}
```

## Étape 4. Vérifier le statut de l'abonnement \{#step-4-check-the-subscription-status\}

Après un achat ou une restauration, vérifiez le [niveau d'accès](access-level) de l'utilisateur pour décider d'afficher le paywall ou de débloquer les fonctionnalités payantes. Les méthodes `makePurchase` et `restorePurchases` retournent déjà le profil mis à jour ; lorsque vous avez besoin du statut actuel ailleurs dans l'application, utilisez la méthode `getProfile` :

```kotlin showLineNumbers

fun checkPremiumAccess() {
    Adapty.getProfile()
        .onSuccess { profile ->
            val hasPremiumAccess = profile.accessLevels["premium"]?.isActive == true
            // Grant access to paid features if hasPremiumAccess is true
        }
        .onError { error ->
            // Handle the error
        }
}
```

Pour d'autres façons de vérifier et surveiller le statut de l'abonnement, notamment en écoutant les mises à jour en temps réel, consultez [Vérifier le statut de l'abonnement](kmp-check-subscription-status).

## Prochaines étapes \{#next-steps\}

:::tip
Des questions ou des problèmes ? Consultez notre [forum d'assistance](https://adapty.featurebase.app/) où vous trouverez des réponses aux questions fréquentes ou pourrez poser les vôtres. Notre équipe et notre communauté sont là pour vous aider !
:::

Votre paywall est prêt à être affiché dans l'application. Testez vos achats dans le [sandbox App Store](test-purchases-in-sandbox) ou dans le [Google Play Store](testing-on-android) pour vous assurer de pouvoir effectuer un achat test depuis le paywall. Pour voir comment cela fonctionne dans une implémentation prête pour la production, consultez [AppViewModel.kt](https://github.com/adaptyteam/AdaptySDK-KMP/blob/main/example/composeMultiplatformApp/composeApp/src/commonMain/kotlin/com/adapty/exampleapp/AppViewModel.kt) dans notre exemple d'application, qui illustre la gestion des achats avec une gestion des erreurs et une gestion d'état appropriées.