Gestionar eventos de onboarding en Unity SDK

Antes de empezar, asegúrate de que:

  1. Tienes instalado el SDK de Adapty para Unity 3.14.0 o posterior.
  2. Has creado un onboarding.
  3. Has añadido el onboarding a un placement.

Los onboardings configurados con el builder generan eventos a los que tu app puede responder. A continuación aprenderás cómo responder a esos eventos.

Para controlar o monitorizar los procesos que ocurren en la pantalla de onboarding dentro de tu app de Unity, implementa la interfaz AdaptyOnboardingsEventsListener.

Acciones personalizadas

En el builder puedes añadir una acción custom a un botón y asignarle un ID.

ios-events-1.webp

Luego puedes usar ese ID en tu código y gestionarlo como una acción personalizada. Por ejemplo, si un usuario pulsa un botón personalizado como Login o Allow notifications, se activará el método OnboardingViewOnCustomAction con el parámetro actionId igual al Action ID definido en el builder. Puedes crear tus propios IDs, como “allowNotifications”.

Para gestionar los eventos del onboarding, implementa la interfaz AdaptyOnboardingsEventsListener:

public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    void Start()
    {
        Adapty.SetOnboardingsEventsListener(this);
    }

    public void OnboardingViewOnCustomAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string actionId
    )
    {
        if (actionId == "allowNotifications") {
            // request notification permissions
        }
    }
    
    public void OnboardingViewDidFailWithError(
        AdaptyUIOnboardingView view,
        AdaptyError error
    )
    {
        // handle errors
    }

    // Implement other required interface methods (see examples below)
}
Ejemplo de evento (haz clic para expandir)
{
  "actionId": "allowNotifications",
  "meta": {
    "onboardingId": "onboarding_123",
    "screenClientId": "profile_screen",
    "screenIndex": 0,
    "screensTotal": 3
  }
}

Cerrar el onboarding

El onboarding se considera cerrado cuando el usuario pulsa un botón con la acción Close asignada.

ios-events-2.webp

Ten en cuenta que debes gestionar qué ocurre cuando el usuario cierra el onboarding. Por ejemplo, necesitas dejar de mostrar el onboarding en sí.

Implementa el método OnboardingViewOnCloseAction en tu clase:

public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnCloseAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string actionId
    )
    {
        view.Dismiss((error) => {
            if (error != null) {
                // handle the error
            }
        });
    }
    
    // ... other interface methods
}
Ejemplo de evento (haz clic para expandir)
{
  "action_id": "close_button",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "final_screen",
    "screen_index": 3,
    "total_screens": 4
  }
}

Abrir un paywall

Gestiona este evento para abrir un paywall si quieres abrirlo dentro del onboarding. Si prefieres abrir el paywall después de que este se cierre, hay una forma más directa: gestiona OnboardingViewOnCloseAction y abre el paywall sin depender de los datos del evento.

Si un usuario pulsa un botón que abre un paywall, recibirás el ID de acción del botón que configuraste manualmente. La forma más fluida de trabajar con paywalls en onboardings es hacer que el ID de acción sea igual al ID de placement del paywall. Así, tras el evento OnboardingViewOnPaywallAction, puedes usar el ID de placement para obtener y abrir el paywall de inmediato.

Ten en cuenta que, en iOS, solo puede mostrarse una vista (paywall u onboarding) en pantalla a la vez. Si presentas un paywall encima de un onboarding, no podrás controlar el onboarding en segundo plano de forma programática. Si intentas cerrar el onboarding, se cerrará el paywall en su lugar, dejando visible el onboarding. Para evitarlo, cierra siempre la vista del onboarding antes de presentar el paywall.

public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnPaywallAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string actionId
    )
    {
        // Dismiss onboarding before presenting paywall
        view.Dismiss((dismissError) => {
            if (dismissError != null) {
                // handle the error
                return;
            }

            Adapty.GetPaywall(actionId, (paywall, error) => {
                if (error != null) {
                    // handle the error
                    return;
                }

                AdaptyUI.CreatePaywallView(paywall, (paywallView, createError) => {
                    if (createError != null) {
                        // handle the error
                        return;
                    }

                    paywallView.Present((presentError) => {
                        if (presentError != null) {
                            // handle the error
                        }
                    });
                });
            });
        });
    }
    
    // ... other interface methods
}
Ejemplo de evento (haz clic para expandir)
{
    "action_id": "premium_offer_1",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "pricing_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

Finalización de la carga del onboarding

Cuando el onboarding termina de cargarse, implementa el método OnboardingViewDidFinishLoading:

public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewDidFinishLoading(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta
    )
    {
        // handle loading completion
    }
    
    // ... other interface methods
}
Ejemplo de evento (haz clic para expandir)
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}

Seguimiento de la navegación

El método OnboardingViewOnAnalyticsEvent se invoca cuando ocurren distintos eventos de analítica durante el flujo del onboarding.

El objeto analyticsEvent puede ser uno de los siguientes tipos:

TipoDescripción
AdaptyOnboardingsAnalyticsEventOnboardingStartedCuando el onboarding ha sido cargado
AdaptyOnboardingsAnalyticsEventScreenPresentedCuando se muestra cualquier pantalla
AdaptyOnboardingsAnalyticsEventScreenCompletedCuando se completa una pantalla. Incluye el ElementId opcional (identificador del elemento completado) y Reply opcional (respuesta del usuario). Se activa cuando el usuario realiza cualquier acción para salir de la pantalla.
AdaptyOnboardingsAnalyticsEventSecondScreenPresentedCuando se muestra la segunda pantalla
AdaptyOnboardingsAnalyticsEventUserEmailCollectedSe activa cuando se recoge el correo electrónico del usuario mediante el campo de entrada
AdaptyOnboardingsAnalyticsEventOnboardingCompletedSe activa cuando el usuario llega a una pantalla con el ID final. Si necesitas este evento, asigna el ID final a la última pantalla.
AdaptyOnboardingsAnalyticsEventUnknownPara cualquier tipo de evento no reconocido. Incluye Name (el nombre del evento desconocido) y meta (metadatos adicionales)

Cada evento incluye información de meta con los siguientes campos:

CampoDescripción
OnboardingIdIdentificador único del flujo de onboarding
ScreenClientIdIdentificador de la pantalla actual
ScreenIndexPosición de la pantalla actual en el flujo
ScreensTotalNúmero total de pantallas en el flujo

Aquí tienes un ejemplo de cómo usar los eventos de analítica para el seguimiento:

public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnAnalyticsEvent(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        AdaptyOnboardingsAnalyticsEvent analyticsEvent
    )
    {
        switch (analyticsEvent) {
            case AdaptyOnboardingsAnalyticsEventOnboardingStarted:
                // track onboarding start
                TrackEvent("onboarding_started", meta);
                break;
            case AdaptyOnboardingsAnalyticsEventScreenPresented:
                // track screen presentation
                TrackEvent("screen_presented", meta);
                break;
            case AdaptyOnboardingsAnalyticsEventScreenCompleted screenCompleted:
                // track screen completion with user response
                TrackEvent("screen_completed", meta, screenCompleted.ElementId, screenCompleted.Reply);
                break;
            case AdaptyOnboardingsAnalyticsEventOnboardingCompleted:
                // track successful onboarding completion
                TrackEvent("onboarding_completed", meta);
                break;
            case AdaptyOnboardingsAnalyticsEventUnknown unknownEvent:
                // handle unknown events
                TrackEvent(unknownEvent.Name, meta);
                break;
            // handle other cases as needed
        }
    }
    
    // ... other interface methods
}

El método TrackEvent es un marcador de posición que debes implementar tú mismo para enviar analítica a tu servicio preferido.

Ejemplos de eventos (haz clic para expandir)
// onboardingStarted
{
  "name": "onboarding_started",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "welcome_screen",
    "screen_index": 0,
    "total_screens": 4
  }
}

// screenPresented

{
    "name": "screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "interests_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

// screenCompleted

{
    "name": "screen_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    },
    "params": {
        "element_id": "profile_form",
        "reply": "success"
    }
}

// secondScreenPresented

{
    "name": "second_screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// userEmailCollected

{
    "name": "user_email_collected",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// onboardingCompleted

{
    "name": "onboarding_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "final_screen",
        "screen_index": 3,
        "total_screens": 4
    }
}