Manejar eventos de onboarding en Unity SDK

Antes de empezar, asegúrate de que:

  1. Has 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 se explica cómo hacerlo.

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 personalizada a un botón y asignarle un ID.

ios-events-1.webp

Luego, puedes usar este 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, el método OnboardingViewOnCustomAction se activará con el parámetro actionId siendo el Action ID del 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 ampliar)
{
  "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, debes 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 abrirlo después de que se cierre, hay una forma más directa: gestiona OnboardingViewOnCloseAction y abre el paywall sin depender de los datos del evento.

La forma más fluida de trabajar con paywalls en onboardings es hacer que el ID de acción sea igual al ID del placement del paywall. Así, tras el evento OnboardingViewOnPaywallAction, puedes usar el ID del placement para obtener y abrir el paywall de inmediato. Ten en cuenta que, en iOS, solo se puede mostrar una vista (paywall u onboarding) en pantalla al mismo tiempo. Si presentas un paywall encima de un onboarding, no podrás controlar el onboarding en segundo plano mediante código. Si intentas cerrar el onboarding, se cerrará el paywall en su lugar, dejando el onboarding visible. Para evitar esto, 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 un 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 ampliar)
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}

Seguimiento de navegación

El método OnboardingViewOnAnalyticsEvent se invoca cuando ocurren distintos eventos de analítica durante el flow de onboarding. El objeto analyticsEvent puede ser de uno de los siguientes tipos:

TipoDescripción
AdaptyOnboardingsAnalyticsEventOnboardingStartedCuando el onboarding se ha cargado
AdaptyOnboardingsAnalyticsEventScreenPresentedCuando se muestra cualquier pantalla
AdaptyOnboardingsAnalyticsEventScreenCompletedCuando se completa una pantalla. Incluye un ElementId opcional (identificador del elemento completado) y un 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 a través del campo de entrada
AdaptyOnboardingsAnalyticsEventOnboardingCompletedSe activa cuando un 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 meta con los siguientes campos:
CampoDescripción
OnboardingIdIdentificador único del flow de onboarding
ScreenClientIdIdentificador de la pantalla actual
ScreenIndexPosición de la pantalla actual en el flow
ScreensTotalNúmero total de pantallas en el flow

A continuación se muestra 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íticas a tu servicio de analíticas 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
    }
}