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() falla con #2002 notActivated.

Si tu app autentica usuarios y recoges un customer user ID después del lanzamiento, llama a adapty.identify() en ese momento. No llames a métodos que dependan de acciones del usuario hasta que identify se resuelva. Las llamadas que compiten con él fallan con #3006 profileWasChanged o caen sobre el perfil anónimo creado en la activación. Cuando esto ocurre, la atribución, los IDs de MMP como appsflyer_id y la titularidad 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ítica (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 de MMP cae sobre un perfil anónimo temporal y no siempre se transfiere al identificado. Para más detalles sobre AppsFlyer, consulta AppsFlyer.

El orden correcto

Tu camino depende de dos cosas: cuándo conoces el customer user ID y si usas un SDK de MMP o analítica.

  • Pasos 2 y 5: Obligatorios para cualquier app. Activa el SDK y luego llama a los métodos del SDK.
  • Pasos 1 y 3: Necesarios solo si integras un SDK de MMP o analítica (AppsFlyer, Adjust, Branch, PostHog).
  • Paso 4: Necesario solo si tu app autentica usuarios y recoge el customer user ID después del lanzamiento.

Si tienes el customer user ID en el lanzamiento de la app, pásalo directamente a activate() (paso 2a). Esta ruta nunca crea un perfil anónimo, por lo que el paso 4 es innecesario.

PasoLlamadaCuándoNotas
1Inicializa tu SDK de MMP o analítica (AppsFlyer, Adjust, PostHog, Branch)Lanzamiento de la app, primeroEspera el callback de UID del MMP, por ejemplo getAppsFlyerUID.
2aadapty.activate({ apiKey: '...', params: { customerUserId: '...' } })Lanzamiento de la app, después del paso 1, si tienes el customer user IDRecomendado. Nunca se crea un perfil anónimo.
2badapty.activate({ apiKey: '...' }) sin customerUserIdLanzamiento de la app, después del paso 1, si no tienes el customer user ID (o nunca lo recoges)Adapty crea un perfil anónimo.
3adapty.setIntegrationIdentifier({ key: '...', value: '...' }) para cada MMPDespués del paso 2, antes de cualquier llamada de acción de usuarioNecesario para que los IDs de MMP caigan en el perfil correcto.
4await adapty.identify({ customerUserId: 'YOUR_USER_ID' })Después del paso 3 (o paso 2 si no hay MMP), antes del paso 5 — solo en la ruta 2b con autenticaciónUsa siempre await. Las llamadas concurrentes durante identify producen #3006 profileWasChanged.
5getPaywall, getPaywallProducts, restorePurchases, makePurchase, updateAttribution, updateProfileDespués del paso 4 si llamas a identify; en caso contrario, después del paso 3 (o paso 2 si no hay MMP)Estas llamadas necesitan un perfil estable.

Omitir estos pasos provoca pérdida de acceso premium para usuarios que regresan, appsflyer_id faltante en los perfiles y paywalls devueltos para la audiencia incorrecta.

Instalaciones web2app y de embudo web

Si los usuarios compran en un checkout web (Stripe, Paddle) e instalan luego 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 del lanzamiento de la app (desde tu flujo de autenticación o el referrer de instalación), pásalo directamente a activate(). De lo contrario, la compra web es invisible en el dispositivo hasta que llames a identify({ customerUserId: 'YOUR_USER_ID' }) y luego a restorePurchases.

Para los metadatos que debes enviar con cada checkout web, consulta: