Orden de llamadas en el SDK de iOS

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 o bien fallan con #3006 profileWasChanged, o recaen 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 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 SDK de MMP y analítica (AppsFlyer, Adjust, Branch, PostHog) siguen la misma regla. Inicialízalos primero y espera a sus callbacks de UID antes de llamar a Adapty.activate. De lo contrario, el ID del MMP queda asociado a un perfil anónimo temporal y no siempre se transfiere al perfil identificado. Para detalles específicos de AppsFlyer, consulta AppsFlyer.

El orden correcto

Tu ruta depende de dos factores: cuándo conoces el customer user ID y si usas un MMP o SDK de analíticas.

  • 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: Necesarios solo si integras un MMP o SDK de analíticas (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 ID de usuario del cliente en el arranque de la app, pásalo directamente a activate() (paso 2a). Esta ruta nunca crea un perfil anónimo, por lo que el paso 4 no es necesario.

PasoLlamadaCuándoNotas
1Inicializa tu MMP o SDK de analítica (AppsFlyer, Adjust, PostHog, Branch)Al iniciar la app, primeroEspera el callback de UID del MMP, por ejemplo getAppsFlyerUID.
2aAdapty.activate(with: config) con customerUserId definido en la configAl iniciar la app, tras el paso 1, si tienes el ID de usuarioRecomendado. No se crea ningún perfil anónimo.
2bAdapty.activate(with: config) sin customerUserIdAl iniciar la app, tras el paso 1, si no tienes el ID de usuario (o nunca lo recopilas)Adapty crea un perfil anónimo.
3Adapty.setIntegrationIdentifier(...) para cada MMPTras el paso 2, antes de cualquier llamada de acción de usuarioNecesario para que los IDs del MMP queden asociados al perfil correcto.
4try await Adapty.identify("YOUR_USER_ID")Tras el paso 3 (o el paso 2 si no hay MMP), antes del paso 5 — solo en el flujo 2b con autenticaciónSiempre usa await. Las llamadas concurrentes durante identify producen #3006 profileWasChanged.
5getPaywall, getPaywallProducts, restorePurchases, makePurchase, updateExternalAttribution, updateProfileTras el paso 4 si llamas a identify; de lo contrario, tras el paso 3 (o el paso 2 si no hay MMP)Estas llamadas necesitan un perfil estable.
Important

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

Las actualizaciones repetidas del perfil están limitadas

Envía los identificadores de integración y los atributos del perfil una sola vez, tras completar la activación, y solo cuando cambie algún valor. Si tu app actualiza el perfil con demasiada frecuencia, el backend de Adapty limita el endpoint: la solicitud falla con #2004 serverError y el SDK bloquea las llamadas posteriores a ese endpoint hasta que finalice el intervalo de reintento especificado por el servidor. La limitación es por endpoint, por lo que el resto de llamadas del SDK siguen funcionando.

Instalaciones web2app y de embudo web

Si los usuarios compran en un checkout web (Stripe, Paddle, FunnelFox) e instalan después 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 referrer de instalación), pásalo directamente a activate(). De lo contrario, la compra web será invisible en el dispositivo hasta que llames a identify("YOUR_USER_ID") y luego a restorePurchases.

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