Activer les achats avec Flow Builder dans le SDK Capacitor

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

  • Produits – tout ce que les utilisateurs peuvent acheter (abonnements, consommables, accès à vie)
  • Flows – séquences d’écrans qui présentent des produits aux utilisateurs, construites dans le Flow Builder sans code. Le SDK les récupère via getFlow. Si vous préférez construire l’interface dans votre propre code, utilisez un paywall à la place — voir Implémenter des paywalls manuellement.
  • Placements – où et quand vous affichez des flows dans votre application (comme main, onboarding, settings). Vous associez des flows à des 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 flows différents selon les utilisateurs.

Adapty vous propose trois façons d’activer les achats dans votre application. Choisissez celle qui correspond le mieux à vos besoins :

ImplémentationComplexitéQuand l’utiliser
Adapty Flow Builder✅ FacileVous créez un flow complet et prêt à l’achat dans le builder sans code. Adapty l’affiche automatiquement et gère tout le processus d’achat, la validation des reçus et la gestion des abonnements en coulisses.
Paywalls créés manuellement🟡 MoyenVous implémentez votre interface de paywall dans le code de votre application, mais récupérez quand même l’objet flow depuis Adapty pour garder de la flexibilité sur les offres de produits. Voir le guide.
Mode observateur🔴 DifficileVous disposez déjà de votre propre infrastructure de gestion des achats et souhaitez continuer à l’utiliser. Notez que le mode observateur a ses limitations dans Adapty. Voir l’article.

Les étapes ci-dessous montrent comment implémenter un flow créé dans Adapty Flow Builder.

Si vous préférez construire vous-même l’interface du paywall, voir Implémenter des paywalls manuellement.

Pour afficher un flow créé dans Adapty Flow Builder, vous n’avez besoin que de :

  1. Récupérer le flow : Obtenez-le depuis Adapty.
  2. L’afficher et Adapty gérera les achats à votre place : Affichez la vue dans votre application.
  3. Gérer les actions des boutons : Associez les interactions utilisateur aux réponses de votre application. Par exemple, ouvrir des liens ou fermer le flow lorsque les utilisateurs cliquent sur des boutons.

Avant de commencer

Avant de commencer, effectuez ces étapes :

  1. Connectez votre application à l’App Store et/ou à Google Play dans l’Adapty Dashboard.
  2. Créez vos produits dans Adapty.
  3. Créez un flow et ajoutez-y des produits.
  4. Créez un placement et ajoutez-y votre flow.
  5. Installez et activez le SDK Adapty dans le code de votre application. Ce guide utilise les API Adapty Capacitor SDK v4.

1. Récupérer le flow

Vos flows sont associés à des placements configurés dans le tableau de bord. Les placements vous permettent d’exécuter différents flows pour différentes audiences ou de lancer des tests A/B.

Pour obtenir un flow créé dans Adapty Flow Builder, récupérez l’objet flow par l’ID de placement à l’aide de la méthode getFlow. Le flow contient les éléments d’interface et le style nécessaires à son affichage.


try {
  const flow = await adapty.getFlow({
    placementId: 'YOUR_PLACEMENT_ID',
  });
  // the requested flow
} catch (error) {
  // handle the error
}

2. Afficher le flow

Maintenant que vous avez le flow, quelques lignes suffisent pour l’afficher.

Créez une view avec la méthode createFlowView, définissez ses gestionnaires d’événements, puis appelez view.present(). Chaque view ne peut être utilisée qu’une seule fois. Si vous devez afficher le flow à nouveau, appelez createFlowView une nouvelle fois pour créer une nouvelle instance de view.


try {
  const view = await createFlowView(flow);

  await view.setEventHandlers({
    onPurchaseCompleted(purchaseResult, product) {
      return purchaseResult.type === 'success'; // close the flow on a successful purchase, keep it open for cancelled or pending purchases
    },
  });

  await view.present();
} catch (error) {
  // handle the error
}

Pour plus de détails sur l’affichage d’un flow, consultez notre guide.

3. Gérer les actions des boutons

Lorsque les utilisateurs cliquent sur des boutons dans le flow, le SDK Capacitor gère automatiquement les achats, la restauration, la fermeture du flow et l’ouverture des URL.

Cependant, d’autres boutons ont des ID personnalisés ou prédéfinis et nécessitent de gérer les actions dans votre code. Vous pouvez également vouloir remplacer leur comportement par défaut.

Par exemple, voici le comportement par défaut du bouton de fermeture. Vous n’avez pas besoin de l’ajouter dans le code, mais vous pouvez voir ici comment procéder si nécessaire.

const unsubscribe = await view.setEventHandlers({
  onCloseButtonPress() {
    return true; // allow the flow to close
  },
});

Consultez nos guides sur la gestion des actions et des événements des boutons.

Étapes suivantes

Des questions ou des problèmes ? Consultez notre forum d’assistance 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 flow est prêt à être affiché dans l’application. Testez vos achats pour vous assurer de pouvoir effectuer un achat test depuis le flow.

Vous devez ensuite vérifier le niveau d’accès des utilisateurs pour vous assurer d’afficher un flow ou de donner accès aux fonctionnalités payantes aux bons utilisateurs.

Exemple complet

Voici comment intégrer ensemble toutes les étapes de ce guide dans votre application.


export async function showFlow() {
  try {
    const flow = await adapty.getFlow({
      placementId: 'YOUR_PLACEMENT_ID',
    });

    const view = await createFlowView(flow);

    await view.setEventHandlers({
      onCloseButtonPress() {
        return true;
      },
      onPurchaseCompleted(purchaseResult, product) {
        return purchaseResult.type === 'success'; // close the flow on a successful purchase, keep it open for cancelled or pending purchases
      },
    });

    await view.present();
  } catch (error) {
    // handle any error that may occur during the process
    console.warn('Error showing flow:', error);
  }
}