Orden de llamadas en el SDK de Capacitor
adapty.activate() debe completarse antes de llamar a cualquier otro método del SDK de Adapty. Hasta que se resuelva, el SDK no tiene estado. Cualquier llamada realizada antes o en paralelo con activate() fallará con #2002 notActivated.
Si tu app autentica usuarios y recopilas un customer user ID después del lanzamiento, llama a adapty.identify() en ese momento. No llames a métodos de acción del usuario hasta que identify se resuelva. Las llamadas que compiten con él fallan con #3006 profileWasChanged o se aplican al perfil anónimo creado en la activación. Cuando esto ocurre, la atribución, los IDs de MMP como appsflyer_id y la propiedad de la instalación no siempre se transfieren al perfil identificado. Si tu app no autentica usuarios, omite identify y sigue trabajando con el perfil anónimo.
Los SDKs de MMP y analíticas (AppsFlyer, Adjust, Branch, PostHog) siguen la misma regla. Inicialízalos primero y espera sus callbacks de UID antes de llamar a adapty.activate. De lo contrario, el ID del MMP se asocia a un perfil anónimo temporal y no siempre se transfiere al perfil identificado. Para más detalles sobre AppsFlyer, consulta AppsFlyer.
El orden correcto
Tu proceso depende de dos factores: cuándo conoces el customer user ID y si usas un MMP o SDK de analítica.
- Pasos 2 y 5: Obligatorios para todas las apps. Activa el SDK y luego llama a los métodos del SDK.
- Pasos 1 y 3: Requeridos solo si integras un MMP o SDK de analítica (AppsFlyer, Adjust, Branch, PostHog).
- Paso 4: Requerido solo si tu app autentica usuarios y obtiene el customer user ID después del lanzamiento.
Si tienes el ID de usuario en el momento del lanzamiento de la app, pásalo directamente en
activate()(paso 2a). Con este enfoque nunca se crea un perfil anónimo, por lo que el paso 4 es innecesario. | Paso | Llamada | Cuándo | Notas | |------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | 1 | Inicializa tu MMP o SDK de analíticas (AppsFlyer, Adjust, PostHog, Branch) | Al iniciar la app, primero | Espera el callback de UID del MMP, por ejemplogetAppsFlyerUID. | | 2a |adapty.activate({ apiKey: '...', params: { customerUserId: '...' } })| Al iniciar la app, después del paso 1, si tienes el ID de usuario del cliente | Recomendado. No se crea ningún perfil anónimo. | | 2b |adapty.activate({ apiKey: '...' })sincustomerUserId| Al iniciar la app, después del paso 1, si no tienes el ID de usuario del cliente (o nunca lo recopilas) | Adapty crea un perfil anónimo. | | 3 |adapty.setIntegrationIdentifier({ key: '...', value: '...' })para cada MMP | Después del paso 2, antes de cualquier llamada de acción del usuario | Necesario para que los IDs del MMP lleguen al perfil correcto. | | 4 |await adapty.identify({ customerUserId: 'YOUR_USER_ID' })| Después del paso 3 (o del paso 2 si no hay MMP), antes del paso 5 — solo en el camino 2b con autenticación | Usa siempreawait. Las llamadas concurrentes duranteidentifyproducen#3006 profileWasChanged. | | 5 |getPaywall(getFlowen SDK v4),getPaywallProducts,restorePurchases,makePurchase,updateAttribution,updateProfile| Después del paso 4 si llamas aidentify; de lo contrario después del paso 3 (o del paso 2 si no hay MMP) | Estas llamadas necesitan un perfil estable. |
Omitir estos pasos provoca que los usuarios que regresan pierdan el acceso premium, que falte el appsflyer_id en los perfiles y que los paywalls se muestren a la audiencia incorrecta.
Instalaciones desde web2app y web-funnel
Si los usuarios compran en un checkout web (Stripe, Paddle) y después instalan la app nativa, el primer activate() del dispositivo crea un nuevo perfil anónimo. Este perfil no está vinculado al perfil web. Si puedes resolver el customer user ID antes de lanzar la app (desde tu flujo de autenticación o el referrer de instalación), pásalo directamente en activate(). De lo contrario, la compra web será invisible en el dispositivo hasta que llames a identify({ customerUserId: 'YOUR_USER_ID' }) y luego a restorePurchases.
Para ver los metadatos que debes enviar con cada checkout web, consulta: