Ordre d'appel dans le SDK Capacitor
adapty.activate() doit se terminer avant d’appeler toute autre méthode du SDK Adapty. Tant qu’elle n’est pas résolue, le SDK n’a aucun état. Tout appel émis avant ou en parallèle de activate() échoue avec #2002 notActivated.
Si votre application authentifie les utilisateurs et collecte un customer user ID après le lancement, appelez adapty.identify() à ce moment-là. N’appelez pas les méthodes liées aux actions utilisateur avant que identify soit résolu. Les appels qui s’exécutent en parallèle échouent soit avec #3006 profileWasChanged, soit se retrouvent sur le profil anonyme créé à l’activation. Dans ce cas, l’attribution, les identifiants MMP comme 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’identifiant 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.
Le bon ordre
Votre parcours dépend de deux choses : le moment où vous connaissez l’identifiant utilisateur, et si vous utilisez un MMP ou un SDK d’analyse.
- Étapes 2 et 5 : Obligatoires pour toutes les applications. Activez le SDK, puis appelez les méthodes du 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 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 SDK MMP ou analytics (AppsFlyer, Adjust, PostHog, Branch) | Au lancement de l’application, en premier | Attendez le callback UID du MMP, par exemple getAppsFlyerUID. |
| 2a | adapty.activate({ apiKey: '...', params: { customerUserId: '...' } }) | Au lancement de l’application, après l’étape 1, si vous disposez du customer user ID | Recommandé. Aucun profil anonyme n’est jamais créé. |
| 2b | adapty.activate({ apiKey: '...' }) sans customerUserId | Au lancement de l’application, après l’étape 1, si vous n’avez pas le customer user ID (ou ne le collectez jamais) | Adapty crée un profil anonyme. |
| 3 | adapty.setIntegrationIdentifier({ key: '...', value: '...' }) pour chaque MMP | Après l’étape 2, avant tout appel déclenché par une action utilisateur | Obligatoire pour que les identifiants MMP soient associés au bon profil. |
| 4 | await adapty.identify({ customerUserId: 'YOUR_USER_ID' }) | Après l’étape 3 (ou l’étape 2 sans MMP), avant l’étape 5 — uniquement sur le chemin 2b avec authentification | Toujours await. Les appels simultanés pendant identify produisent #3006 profileWasChanged. |
| 5 | getPaywall (getFlow dans le SDK v4), getPaywallProducts, restorePurchases, makePurchase, updateAttribution (updateExternalAttribution dans le SDK 4.1), updateProfile | Après l’étape 4 si vous appelez identify ; sinon après l’étape 3 (ou l’étape 2 sans MMP) | Ces appels nécessitent un profil stable. |
Ignorer ces étapes entraîne une perte d’accès premium pour les utilisateurs existants, l’absence d’appsflyer_id sur les profils, et des paywalls renvoyés pour la mauvaise audience.
Installations web2app et web-funnel
Si des utilisateurs effectuent un achat via un checkout web (Stripe, Paddle) puis installent l’application native, le premier appel activate() sur l’appareil crée un nouveau profil anonyme. Ce profil n’est pas lié au profil web. Si vous pouvez résoudre l’identifiant utilisateur avant le lancement de l’application (depuis votre flux d’authentification ou le référent d’installation), transmettez-le directement à activate(). Sinon, l’achat web reste invisible sur l’appareil jusqu’à ce que vous appeliez identify({ customerUserId: 'YOUR_USER_ID' }) puis restorePurchases.
Pour les métadonnées à envoyer avec chaque checkout web, consultez :