Manejar eventos de onboarding en el SDK de Capacitor

Los onboardings configurados con el builder generan eventos a los que tu app puede responder. Usa el método setEventHandlers para manejar estos eventos en la presentación de pantallas independientes.

Antes de empezar, asegúrate de que:

  1. Has creado un onboarding.
  2. Has añadido el onboarding a un placement.

Configura los manejadores de eventos

Para gestionar eventos de onboardings, usa el método view.setEventHandlers:


try {
  const view = await createOnboardingView(onboarding);
  
  view.setEventHandlers({
    onAnalytics(event, meta) {
      console.log('Analytics event:', event);
    },
    onClose(actionId, meta) {
      console.log('Onboarding closed:', actionId);
      return true; // Allow the onboarding to close
    },
    onCustom(actionId, meta) {
      console.log('Custom action:', actionId);
      return false; // Don't close the onboarding
    },
    onPaywall(actionId, meta) {
      console.log('Paywall action:', actionId);
      view.dismiss().then(() => {
        openPaywall(actionId);
      });
    },
    onStateUpdated(action, meta) {
      console.log('State updated:', action);
    },
    onFinishedLoading(meta) {
      console.log('Onboarding finished loading');
    },
    onError(error) {
      console.error('Onboarding error:', error);
    },
  });
  
  await view.present();
} catch (error) {
  console.error('Failed to present onboarding:', error);
}

Tipos de eventos

Las siguientes secciones describen los distintos tipos de eventos que puedes gestionar.

Gestionar acciones personalizadas

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

ios-events-1.webp

Después, 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 manejador de eventos se activará con el parámetro actionId que coincide con el Action ID del builder. Puedes crear tus propios IDs, como “allowNotifications”.

view.setEventHandlers({
  onCustom(actionId, meta) {
    switch (actionId) {
      case 'login':
        console.log('Login action triggered');
        break;
      case 'allow_notifications':
        console.log('Allow notifications action triggered');
        break;
    }
    return false; // Don't close the onboarding
  },
});
Ejemplo de evento (Haz clic para expandir)
{
  "actionId": "allow_notifications",
  "meta": {
    "onboardingId": "onboarding_123",
    "screenClientId": "profile_screen",
    "screenIndex": 0,
    "screensTotal": 3
  }
}

Finalización de la carga del onboarding

Cuando un onboarding termina de cargarse, se activa este evento:

view.setEventHandlers({
  onFinishedLoading(meta) {
    console.log('Onboarding loaded:', meta.onboardingId);
  },
});
Ejemplo de evento (haz clic para expandir)
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}

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 propio onboarding.

view.setEventHandlers({
  onClose(actionId, meta) {
    console.log('Onboarding cerrado:', actionId);
    return true; // Permite que el onboarding se cierre
  },
});
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 quieres abrir un paywall después de que se cierre, hay una forma más directa de hacerlo: gestiona la acción de cierre y abre un 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 de placement del paywall. Ten en cuenta que, en iOS, solo se puede mostrar 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 mediante programación. Si intentas cerrar el onboarding, se cerrará el paywall en su lugar, dejando el onboarding visible. Para evitarlo, cierra siempre la vista del onboarding antes de presentar el paywall.

view.setEventHandlers({
  onPaywall(actionId, meta) {
    // Cierra el onboarding antes de mostrar el paywall
    view.dismiss().then(() => {
      openPaywall(actionId);
    });
  },
});

async function openPaywall(placementId: string) {
  // Implementa aquí tu lógica para abrir el paywall
}
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
    }
}

Seguimiento de navegación

Recibes un evento de analítica cuando ocurren distintos eventos de navegación durante el flow de onboarding:

view.setEventHandlers({
  onAnalytics(event, meta) {
    console.log('Analytics event:', event.type, meta.onboardingId);
  },
});

El objeto event puede ser uno de los siguientes tipos:

TipoDescripción
onboardingStartedCuando el onboarding se ha cargado
screenPresentedCuando se muestra cualquier pantalla
screenCompletedCuando se completa una pantalla. Incluye 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.
secondScreenPresentedCuando se muestra la segunda pantalla
userEmailCollectedSe activa cuando se recopila el correo electrónico del usuario a través del campo de entrada
onboardingCompletedSe activa cuando un usuario llega a una pantalla con el ID final. Si necesitas este evento, asigna el ID final a la última pantalla.
unknownPara cualquier tipo de evento no reconocido. Incluye name (el nombre del evento desconocido) y meta (metadatos adicionales)
Cada evento incluye información meta que contiene:
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
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
    }
}