---
title: "Ordre d'appel dans le SDK Unity"
description: "Évitez la perte d'accès premium, les attributions manquantes et les erreurs intermittentes #2002 en appelant les méthodes du SDK Adapty dans le bon ordre."
---

`Adapty.Activate()` doit se terminer avant tout autre appel à une méthode du SDK Adapty. Tant que son callback de complétion n'a pas été déclenché, le SDK n'a aucun état. Tout appel effectué avant ou en parallèle de `Activate()` échoue avec [`#2002 notActivated`](unity-handle-errors#custom-network-codes).

Si votre application authentifie les utilisateurs et que vous collectez un identifiant utilisateur client après le lancement, appelez `Adapty.Identify()` à ce moment-là. N'appelez pas les méthodes liées aux actions utilisateur avant que le callback `Identify` ne se déclenche. Les appels qui entrent en concurrence avec lui échouent soit avec [`#3006 profileWasChanged`](unity-handle-errors#custom-network-codes), soit atterrissent sur le profil anonyme créé lors de l'activation. Dans ce cas, l'attribution, les identifiants MMP tels que `appsflyer_id` et la propriété de l'installation ne sont pas toujours transférés vers le profil identifié. Si votre application n'authentifie pas les utilisateurs, ignorez `Identify` et continuez à travailler avec le profil anonyme.

Les SDK MMP et analytics (AppsFlyer, Adjust, Branch, PostHog) suivent la même règle. Initialisez-les en premier et attendez leurs callbacks d'UID avant d'appeler `Adapty.Activate`. Sinon, l'ID MMP est associé à un profil anonyme éphémère et n'est pas toujours transféré au profil identifié. Pour les spécificités d'AppsFlyer, consultez [AppsFlyer](appsflyer).

## L'ordre correct \{#the-correct-order\}

Votre parcours dépend de deux choses : quand vous connaissez l'identifiant utilisateur client, et si vous utilisez un MMP ou un SDK d'analyse.

- **Étapes 2 et 5** : Obligatoires pour chaque application. Activez le SDK, puis appelez les méthodes SDK.
- **Étapes 1 et 3** : Requises uniquement si vous intégrez un MMP ou un SDK d'analyse (AppsFlyer, Adjust, Branch, PostHog).
- **Étape 4** : Requise uniquement si votre application authentifie les utilisateurs et collecte l'identifiant utilisateur client après le lancement.

Si vous disposez de l'identifiant utilisateur au lancement de l'application, passez-le directement dans `Activate()` (étape 2a). Ce chemin ne crée jamais de profil anonyme, donc l'étape 4 est inutile.

| Étape | Appel | Quand | Notes |
|------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| 1    | Initialisez votre MMP ou SDK analytics (AppsFlyer, Adjust, PostHog, Branch)                                     | Au lancement de l'app, en premier                                                      | Attendez le callback UID du MMP, par exemple `getAppsFlyerId`.                                 |
| 2a   | `Adapty.Activate(builder.Build(), ...)` avec `SetCustomerUserId` défini sur le builder                           | Au lancement de l'app, après l'étape 1, si vous disposez de l'ID utilisateur client             | Recommandé. Aucun profil anonyme n'est jamais créé.                                             |
| 2b   | `Adapty.Activate(builder.Build(), ...)` sans `SetCustomerUserId`                                           | Au lancement de l'app, après l'étape 1, si vous n'avez pas l'ID utilisateur client (ou ne le collectez jamais) | Adapty crée un profil anonyme.                                                           |
| 3    | `Adapty.SetIntegrationIdentifier(key, value, callback)` pour chaque MMP                                          | Après l'étape 2, avant tout appel déclenché par une action utilisateur                              | Nécessaire pour que les IDs MMP soient associés au bon profil.                                               |
| 4    | `Adapty.Identify("YOUR_USER_ID", callback)`                                                                   | Après l'étape 3 (ou l'étape 2 si pas de MMP), avant l'étape 5 — uniquement sur le chemin 2b avec authentification | Attendez le callback de fin. Des appels simultanés pendant `Identify` produisent `#3006 profileWasChanged`. |
| 5    | `GetPaywall` (`GetFlow` dans le SDK v4), `GetPaywallProducts`, `RestorePurchases`, `MakePurchase`, `UpdateAttribution`, `UpdateProfile`  | Après l'étape 4 si vous appelez `Identify` ; sinon après l'étape 3 (ou l'étape 2 si pas de MMP)      | Ces appels nécessitent un profil stable.                                                             |

:::important
Ignorer ces étapes entraîne une perte d'accès premium pour les utilisateurs qui reviennent, l'absence d'`appsflyer_id` sur les profils, et des paywalls renvoyés pour la mauvaise audience.
:::

## Installations via web2app et web-funnel \{#web2app-and-web-funnel-installs\}

Si des utilisateurs achètent via un checkout web (Stripe, Paddle) puis installent l'application native, le premier `Activate()` du terminal crée un nouveau profil anonyme. Ce profil n'est pas lié au profil web. Si vous pouvez résoudre l'ID utilisateur client avant le lancement de l'application (depuis votre flow d'authentification ou le referrer d'installation), passez-le directement dans `Activate()`. Dans le cas contraire, l'achat web reste invisible sur le terminal jusqu'à ce que vous appeliez `Identify("YOUR_USER_ID")` puis `RestorePurchases`.

Pour les métadonnées à envoyer avec chaque checkout web, consultez :

- [Stripe](stripe)
- [Paddle](paddle)