Gestionar eventos de onboarding en Unity SDK
Antes de empezar, asegúrate de que:
- Tienes instalado el SDK de Adapty para Unity 3.14.0 o posterior.
- Has creado un onboarding.
- 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.
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.
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:
| Tipo | Descripción |
|---|---|
AdaptyOnboardingsAnalyticsEventOnboardingStarted | Cuando el onboarding ha sido cargado |
AdaptyOnboardingsAnalyticsEventScreenPresented | Cuando se muestra cualquier pantalla |
AdaptyOnboardingsAnalyticsEventScreenCompleted | Cuando 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. |
AdaptyOnboardingsAnalyticsEventSecondScreenPresented | Cuando se muestra la segunda pantalla |
AdaptyOnboardingsAnalyticsEventUserEmailCollected | Se activa cuando se recoge el correo electrónico del usuario mediante el campo de entrada |
AdaptyOnboardingsAnalyticsEventOnboardingCompleted | Se activa cuando el usuario llega a una pantalla con el ID final. Si necesitas este evento, asigna el ID final a la última pantalla. |
AdaptyOnboardingsAnalyticsEventUnknown | Para 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:
| Campo | Descripción |
|---|---|
OnboardingId | Identificador único del flujo de onboarding |
ScreenClientId | Identificador de la pantalla actual |
ScreenIndex | Posición de la pantalla actual en el flujo |
ScreensTotal | Nú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
}
}