---
title: "Orden de llamadas en Unity SDK"
description: "Evita perder acceso premium, atribución faltante y errores intermitentes #2002 llamando a los métodos del SDK de Adapty en el orden correcto."
---

`Adapty.Activate()` debe completarse antes de llamar a cualquier otro método del SDK de Adapty. Hasta que se dispare su callback de finalización, el SDK no tiene estado. Cualquier llamada realizada antes o en paralelo con `Activate()` falla con [`#2002 notActivated`](unity-handle-errors#custom-network-codes).

Si tu app autentica usuarios y obtienes 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 se dispare el callback de `Identify`. Las llamadas que compiten con él o bien fallan con [`#3006 profileWasChanged`](unity-handle-errors#custom-network-codes), o aterrizan en el perfil anónimo creado durante la activación. Cuando esto ocurre, la atribución, los IDs de MMP como `appsflyer_id` y la propiedad de 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 a sus callbacks de UID antes de llamar a `Adapty.Activate`. De lo contrario, el ID del MMP aterriza en un perfil anónimo temporal y no siempre se transfiere al identificado. Para los detalles específicos de AppsFlyer, consulta [AppsFlyer](appsflyer).

## El orden correcto \{#the-correct-order\}

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

- **Pasos 2 y 5**: Obligatorios para toda 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íticas (AppsFlyer, Adjust, Branch, PostHog).
- **Paso 4**: Necesario solo si tu app autentica usuarios y obtiene el customer user ID después del lanzamiento.

Si tienes el customer user ID al iniciar 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.

| Paso | Llamada                                                                                                       | Cuándo                                                                                  | Notas                                                                                          |
|------|---------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| 1    | Inicializa tu SDK de MMP o analíticas (AppsFlyer, Adjust, PostHog, Branch)                                    | Al lanzar la app, lo primero                                                            | Espera el callback de UID del MMP, por ejemplo `getAppsFlyerId`.                               |
| 2a   | `Adapty.Activate(builder.Build(), ...)` con `SetCustomerUserId` configurado en el builder                     | Al lanzar la app, después del paso 1, si tienes el customer user ID                    | Recomendado. Nunca se crea un perfil anónimo.                                                  |
| 2b   | `Adapty.Activate(builder.Build(), ...)` sin `SetCustomerUserId`                                               | Al lanzar la app, después del paso 1, si no tienes el customer user ID (o nunca lo obtienes) | Adapty crea un perfil anónimo.                                                                 |
| 3    | `Adapty.SetIntegrationIdentifier(key, value, callback)` para cada MMP                                         | Después del paso 2, antes de cualquier llamada de acción del usuario                   | Necesario para que los IDs del MMP aterricen en el perfil correcto.                            |
| 4    | `Adapty.Identify("YOUR_USER_ID", callback)`                                                                   | Después del paso 3 (o paso 2 si no hay MMP), antes del paso 5 — solo en la ruta 2b con autenticación | Espera el callback de finalización. Las llamadas concurrentes durante `Identify` producen `#3006 profileWasChanged`. |
| 5    | `GetPaywall`, `GetPaywallProducts`, `RestorePurchases`, `MakePurchase`, `UpdateAttribution`, `UpdateProfile`  | Despué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.                                                    |

:::important
Saltarse estos pasos provoca pérdida de acceso premium para usuarios recurrentes, `appsflyer_id` ausente en los perfiles y paywalls devueltos para la audiencia incorrecta.
:::

## Instalaciones web2app y web-funnel \{#web2app-and-web-funnel-installs\}

Si los usuarios compran en un checkout web (Stripe, Paddle) y luego 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 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("YOUR_USER_ID")` y luego a `RestorePurchases`.

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

- [Stripe](stripe)
- [Paddle](paddle)