Ordre d'appel dans le SDK iOS

Adapty.activate() doit se terminer avant tout autre appel de méthode du SDK Adapty. Tant qu’il n’est pas résolu, 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 que vous récupérez un identifiant utilisateur client après le lancement, appelez Adapty.identify() à ce moment-là. N’appelez pas de méthodes liées aux actions utilisateur avant que identify ne soit résolu. Les appels qui s’exécutent en parallèle échouent avec #3006 profileWasChanged, ou atterrissent sur le profil anonyme créé à l’activation. Lorsque cela se produit, l’attribution, les identifiants MMP comme appsflyer_id, et la propriété d’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 d’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 atterrit sur un profil anonyme éphémère et n’est pas toujours transféré vers le profil identifié. Pour les spécificités d’AppsFlyer, consultez AppsFlyer.

L’ordre correct

Votre parcours dépend de deux choses : le moment où vous connaissez l’identifiant utilisateur client, et si vous utilisez un SDK MMP ou d’analytics.

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

Si vous disposez de l’identifiant utilisateur client 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.

ÉtapeAppelQuandNotes
1Initialisez votre SDK MMP ou d’analytics (AppsFlyer, Adjust, PostHog, Branch)Lancement de l’application, en premierAttendez le callback d’UID du MMP, par exemple getAppsFlyerUID.
2aAdapty.activate(with: config) avec customerUserId défini sur la configLancement de l’application, après l’étape 1, si vous avez l’identifiant utilisateur clientRecommandé. Aucun profil anonyme n’est jamais créé.
2bAdapty.activate(with: config) sans customerUserIdLancement de l’application, après l’étape 1, si vous n’avez pas l’identifiant utilisateur client (ou ne le collectez jamais)Adapty crée un profil anonyme.
3Adapty.setIntegrationIdentifier(...) pour chaque MMPAprès l’étape 2, avant tout appel lié aux actions utilisateurRequis pour que les identifiants MMP atterrissent sur le bon profil.
4try await Adapty.identify("YOUR_USER_ID")Après l’étape 3 (ou l’étape 2 si pas de MMP), avant l’étape 5 — uniquement sur le chemin 2b avec authentificationToujours await. Les appels concurrents pendant identify produisent #3006 profileWasChanged.
5getPaywall, getPaywallProducts, restorePurchases, makePurchase, updateAttribution, updateProfileAprè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.

Ignorer ces étapes entraîne la perte d’accès premium pour les utilisateurs de retour, l’absence d’appsflyer_id sur les profils, et des paywalls renvoyés pour la mauvaise audience.

Installations web2app et web-funnel

Si les utilisateurs achètent via un checkout web (Stripe, Paddle, FunnelFox) et installent ensuite l’application native, le premier 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 client avant le lancement de l’application (depuis votre flux d’authentification ou le référent d’installation), passez-le directement dans activate(). Sinon, l’achat web reste invisible sur l’appareil jusqu’à ce que vous appeliez identify("YOUR_USER_ID") puis restorePurchases.

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