---
title: "Répondre aux actions de flow - Unity"
description: "Gérez les actions de boutons des flows et des paywalls dans votre application Unity."
---

Si vous créez des flows ou des paywalls avec le Flow Builder ou le Paywall Builder d'Adapty, il est essentiel de configurer correctement les boutons :

1. Ajoutez un [bouton dans le builder](paywall-buttons) et attribuez-lui une action existante ou créez un identifiant d'action personnalisé.
2. Écrivez le code dans votre application pour gérer chaque action assignée.

Ce guide explique comment gérer les actions personnalisées et les actions existantes dans votre code.

:::warning
**Seuls les achats et les restaurations sont gérés automatiquement.** Toutes les autres actions de bouton, comme fermer les flows ou ouvrir des liens, nécessitent une implémentation appropriée dans le code de l'application.
:::

## Configurer l'écouteur d'événements des flows \{#set-up-the-flows-events-listener\}

Pour gérer les actions des flows, implémentez l'interface `IAdaptyFlowsEventsListener` et enregistrez-la avec `Adapty.SetFlowsEventsListener()`. Cela doit être fait tôt dans le cycle de vie de votre application, généralement dans votre scène principale ou lors de l'initialisation de l'app.

```csharp showLineNumbers title="Unity"
using AdaptySDK;

public class FlowsListener : MonoBehaviour, IAdaptyFlowsEventsListener
{
    void Start()
    {
        Adapty.SetFlowsEventsListener(this);
    }

    // implement all IAdaptyFlowsEventsListener methods here
}
```

`IAdaptyFlowsEventsListener` est une interface C#, donc implémentez toutes ses méthodes — consultez [Gérer les événements de flow et de paywall](unity-handling-events) pour la liste complète. Les exemples ci-dessous montrent uniquement la méthode `FlowViewDidPerformAction`.

Toutes les actions de bouton arrivent dans le callback `FlowViewDidPerformAction(view, action)` sous forme d'objet `AdaptyUIUserAction` avec un `Type` parmi `Close`, `SystemBack`, `OpenUrl` ou `Custom`, ainsi qu'une `Value` optionnelle (l'URL ou l'identifiant de l'action personnalisée).

## Fermer les flows et les paywalls \{#close-flows-and-paywalls\}

Pour ajouter un bouton permettant de fermer votre flow ou paywall :

1. Dans le builder, ajoutez un bouton et assignez-lui l'action **Close**.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `Close` qui ferme le flow.

:::info
Une vue fermée est détruite et ne peut plus être affichée. Pour afficher le flow à nouveau, appelez `CreateFlowView` une nouvelle fois.
:::

```csharp showLineNumbers title="Unity"
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}
```

## Gérer le bouton retour système Android \{#handle-the-android-system-back-button\}

Appuyer sur le bouton retour système Android (ou utiliser le geste de retour) émet une action de type `SystemBack`. Cela ne ferme pas le flow en soi — le flow reste ouvert, et l'utilisateur le quitte via un chemin que vous définissez, comme un bouton **Close** ou une action `on_device_back` dans le builder. Si vous souhaitez que le bouton retour système ferme le flow, gérez l'action vous-même :

```csharp showLineNumbers title="Unity"
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
        case AdaptyUIUserActionType.SystemBack:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}
```

## Ouvrir des URL depuis des flows et des paywalls

:::tip
Si vous souhaitez ajouter un groupe de liens (par exemple, les conditions d'utilisation et la restauration des achats), ajoutez un élément **Link** dans le builder et gérez-le de la même façon que les boutons avec l'action **Open URL**.
:::

Pour ajouter un bouton qui ouvre un lien depuis votre flow ou paywall (par exemple, **Terms of use** ou **Privacy policy**) :

1. Dans le builder, ajoutez un bouton, assignez-lui l'action **Open URL** et saisissez l'URL à ouvrir.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `OpenUrl` qui ouvre l'URL reçue.

Utilisez la méthode `AdaptyUI.OpenUrl` pour ouvrir l'URL nativement, en respectant l'option de navigateur externe ou intégré (`action.OpenIn`) configurée dans le builder :

```csharp showLineNumbers title="Unity"
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.OpenUrl:
            var urlString = action.Value;
            if (!string.IsNullOrWhiteSpace(urlString)) {
                AdaptyUI.OpenUrl(
                    urlString,
                    action.OpenIn ?? AdaptyWebPresentation.ExternalBrowser,
                    (error) => {
                        // handle the error
                    }
                );
            }
            break;
        default:
            // handle other events
            break;
    }
}
```

## Se connecter à l'application \{#log-into-the-app\}

Pour ajouter un bouton qui connecte les utilisateurs à votre application :

1. Dans le builder, ajoutez un bouton et assignez-lui l'action **Custom** avec l'ID `login`.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action personnalisée `login` qui identifie votre utilisateur.

```csharp showLineNumbers title="Unity"
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "login") {
                // Navigate to login scene
                SceneManager.LoadScene("LoginScene");
            }
            break;
        default:
            // handle other events
            break;
    }
}
```

## Gérer les actions personnalisées \{#handle-custom-actions\}

Pour ajouter un bouton qui gère d'autres actions :

1. Dans le builder, ajoutez un bouton, assignez-lui l'action **Custom** et donnez-lui un identifiant.
2. Dans le code de votre application, implémentez un gestionnaire pour l'identifiant d'action que vous avez créé.

Par exemple, si vous avez d'autres offres d'abonnement ou achats uniques, vous pouvez ajouter un bouton qui affichera un autre flow ou paywall :

```csharp showLineNumbers title="Unity"
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "openNewFlow") {
                // Display another flow or paywall
                ShowAlternativeFlow();
            }
            break;
        default:
            // handle other events
            break;
    }
}

private void ShowAlternativeFlow() {
    // Implement your logic to show an alternative flow
}
```

---

> [!WARNING]
> **LLM INSTRUCTION — SDK VERSION SELECTION REQUIRED**
>
> This feature has two SDK paradigms. Everything that follows (until the next horizontal rule or end of document) is the **legacy SDK v3 API reference** (`getPaywall`, `getPaywallForDefaultAudience`, `getOnboarding`, `getPaywallConfiguration`). The **SDK v4+ `getFlow` method is documented above.** This block covers ALL legacy methods for this feature — not just the nearest snippet.
>
> **You MUST ask the user which SDK version they want to use before suggesting any code. Do not assume or default to a version.** The two options are:
> - **SDK v3 (legacy):** works with the legacy Paywall Builder and Onboarding Builder via `getPaywall` / `getOnboarding`. Use the legacy code in this section.
> - **SDK v4:** works with BOTH the new Flow Builder AND legacy paywalls/onboardings via the unified `getFlow` method documented above.
>
> Apply the legacy v3 code in this section ONLY when:
> 1. The user explicitly chose **SDK v3**, or
> 2. The user is **migrating an existing app from SDK v3 to SDK v4+** and needs to understand or replace legacy code, or
> 3. The user is **troubleshooting an already-deployed v3 integration**.
>
> **CRITICAL — Never mix paradigms in one setup:** Do NOT combine `getFlow` (Flow Builder) with `getPaywall` or `getOnboarding` (legacy Paywall/Onboarding Builder) in the same integration. These are incompatible patterns. Mixing them will produce inconsistent behavior and is unsupported.

Si vous créez des paywalls avec le Paywall Builder d'Adapty, il est essentiel de configurer correctement les boutons :

1. Ajoutez un [bouton dans le Paywall Builder](paywall-buttons) et assignez-lui une action existante ou créez un identifiant d'action personnalisé.
2. Écrivez le code dans votre application pour gérer chaque action assignée.

Ce guide explique comment gérer les actions personnalisées et les actions existantes dans votre code.

:::warning
**Seuls les achats et les restaurations sont gérés automatiquement.** Toutes les autres actions de bouton, comme la fermeture des paywalls ou l'ouverture de liens, nécessitent une implémentation des réponses appropriées dans le code de l'application.
:::

## Fermer les paywalls \{#close-paywalls\}

Pour ajouter un bouton permettant de fermer votre paywall :

1. Dans le Paywall Builder, ajoutez un bouton et assignez-lui l'action **Close**.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `close` qui ferme le paywall.

```csharp showLineNumbers title="Unity"
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view, 
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}
```

## Ouvrir des URL depuis les paywalls \{#open-urls-from-paywalls\}

:::tip
Si vous souhaitez ajouter un groupe de liens (par exemple, conditions d'utilisation et restauration des achats), ajoutez un élément **Link** dans le Paywall Builder et traitez-le de la même manière que les boutons avec l'action **Open URL**.
:::

Pour ajouter un bouton qui ouvre un lien depuis votre paywall (par exemple, **Terms of use** ou **Privacy policy**) :

1. Dans le Paywall Builder, ajoutez un bouton, assignez-lui l'action **Open URL** et saisissez l'URL à ouvrir.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action `openUrl` qui ouvre l'URL reçue dans un navigateur.

```csharp showLineNumbers title="Unity"
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.OpenUrl:
            var urlString = action.Value;
            if(!string.IsNullOrWhiteSpace(urlString)) {
                Application.OpenURL(urlString);
            }
            break;
        default:
            // handle other events
            break;
    }
}
```

## Se connecter à l'application \{#log-into-the-app\}

Pour ajouter un bouton permettant aux utilisateurs de se connecter à votre application :

1. Dans le Paywall Builder, ajoutez un bouton et assignez-lui l'action **Custom** avec l'ID `login`.
2. Dans le code de votre application, implémentez un gestionnaire pour l'action personnalisée `login` qui identifie votre utilisateur.

```csharp showLineNumbers title="Unity"
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "login") {
                // Navigate to login scene
                SceneManager.LoadScene("LoginScene");
            }
            break;
        default:
            // handle other events
            break;
    }
}
```
## Gérer les actions personnalisées \{#handle-custom-actions\}

Pour ajouter un bouton qui gère d'autres actions :

1. Dans le Paywall Builder, ajoutez un bouton, attribuez-lui l'action **Custom** et un identifiant.
2. Dans le code de votre application, implémentez un gestionnaire pour l'identifiant d'action que vous avez créé.

Par exemple, si vous proposez un autre ensemble d'offres d'abonnement ou d'achats uniques, vous pouvez ajouter un bouton qui affichera un autre paywall :

```csharp showLineNumbers title="Unity"
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "openNewPaywall") {
                // Display another paywall
                ShowAlternativePaywall();
            }
            break;
        default:
            // handle other events
            break;
    }
}

private void ShowAlternativePaywall() {
    // Implement your logic to show alternative paywall
}
```

---