Manejar eventos de onboarding en Unity SDK
Antes de empezar, asegúrate de que:
- Has 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 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.
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.
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:
| Tipo | Descripción |
|---|---|
AdaptyOnboardingsAnalyticsEventOnboardingStarted | Cuando el onboarding se ha cargado |
AdaptyOnboardingsAnalyticsEventScreenPresented | Cuando se muestra cualquier pantalla |
AdaptyOnboardingsAnalyticsEventScreenCompleted | Cuando 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. |
AdaptyOnboardingsAnalyticsEventSecondScreenPresented | Cuando se muestra la segunda pantalla |
AdaptyOnboardingsAnalyticsEventUserEmailCollected | Se activa cuando se recoge el correo electrónico del usuario a través del campo de entrada |
AdaptyOnboardingsAnalyticsEventOnboardingCompleted | Se activa cuando un 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 meta con los siguientes campos: |
| Campo | Descripción |
|---|---|
OnboardingId | Identificador único del flow de onboarding |
ScreenClientId | Identificador de la pantalla actual |
ScreenIndex | Posición de la pantalla actual en el flow |
ScreensTotal | Nú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
}
}