Gestionar eventos de onboarding en el SDK de iOS
Antes de empezar, asegúrate de que:
- Tienes instalado el SDK de Adapty para iOS 3.8.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. Aprende cómo responder a estos eventos a continuación.
Para controlar o monitorizar los procesos que ocurren en la pantalla de onboarding dentro de tu app, implementa los métodos de AdaptyOnboardingControllerDelegate.
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, se activará el método delegado onboardingController con el caso .custom(id:) y el parámetro actionId corresponde al Action ID del builder. Puedes crear tus propios IDs, como “allowNotifications”.
func onboardingController(_ controller: AdaptyOnboardingController, onCustomAction action: AdaptyOnboardingsCustomAction) {
if action.actionId == "allowNotifications" {
// Request notification permissions
}
}
func onboardingController(_ controller: AdaptyOnboardingController, didFailWithError error: AdaptyUIError) {
// Handle errors
}
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 lo que ocurre cuando el usuario cierra el onboarding. Por ejemplo, debes dejar de mostrar el onboarding.
Por ejemplo:
func onboardingController(_ controller: AdaptyOnboardingController, onCloseAction action: AdaptyOnboardingsCloseAction) {
controller.dismiss(animated: true)
}
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 cerrarlo, hay una forma más directa: gestiona AdaptyOnboardingsCloseAction 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 del placement del paywall. Así, tras el AdaptyOnboardingsOpenPaywallAction, puedes usar el ID del placement para obtener y abrir el paywall directamente.
Ten en cuenta que solo se puede mostrar una vista (paywall u onboarding) en pantalla al mismo tiempo. Si presentas un paywall encima de un onboarding, no puedes controlar el onboarding en segundo plano de forma programática. Intentar descartar el onboarding cerrará el paywall en su lugar, dejando el onboarding visible. Para evitar esto, descarta siempre la vista del onboarding antes de presentar el paywall.
func onboardingController(_ controller: AdaptyOnboardingController, onPaywallAction action: AdaptyOnboardingsOpenPaywallAction) {
// Dismiss onboarding before presenting paywall
controller.dismiss(animated: true) {
Task {
do {
// Get the paywall using the placement ID from the action
let paywall = try await Adapty.getPaywall(placementId: action.actionId)
// Get the paywall configuration
let paywallConfig = try await AdaptyUI.getPaywallConfiguration(
forPaywall: paywall
)
// Create and present the paywall controller
let paywallController = try AdaptyUI.paywallController(
with: paywallConfig,
delegate: self
)
// Present the paywall from the root view controller
if let rootVC = UIApplication.shared.windows.first?.rootViewController {
rootVC.present(paywallController, animated: true)
}
} catch {
// Handle any errors that occur during paywall loading
print("Failed to present paywall: \(error)")
}
}
}
}
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 carga del onboarding
Cuando el onboarding termina de cargarse, se invocará este método:
func onboardingController(_ controller: AdaptyOnboardingController, didFinishLoading action: OnboardingsDidFinishLoadingAction) {
// Handle loading completion
}
Ejemplo de evento (haz clic para expandir)
{
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}Seguimiento de navegación
El método onAnalyticsEvent se llama cuando ocurren varios eventos de analíticas durante el flujo del onboarding.
El objeto event puede ser uno de los siguientes tipos:
| Tipo | Descripción |
|---|---|
onboardingStarted | Cuando el onboarding se ha cargado |
screenPresented | Cuando se muestra cualquier pantalla |
screenCompleted | Cuando se completa una pantalla. Incluye el elementId opcional (identificador del elemento completado) y la reply opcional (respuesta del usuario). Se activa cuando los usuarios realizan cualquier acción para salir de la pantalla. |
secondScreenPresented | Cuando se muestra la segunda pantalla |
userEmailCollected | Se activa cuando se recoge el email del usuario a través del campo de entrada |
onboardingCompleted | 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. |
unknown | 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 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 puedes usar los eventos de analíticas para el seguimiento:
func onboardingController(_ controller: AdaptyOnboardingController, onAnalyticsEvent event: AdaptyOnboardingsAnalyticsEvent) {
switch event {
case .onboardingStarted(let meta):
// Track onboarding start
trackEvent("onboarding_started", meta: meta)
case .screenPresented(let meta):
// Track screen presentation
trackEvent("screen_presented", meta: meta)
case .screenCompleted(let meta, let elementId, let reply):
// Track screen completion with user response
trackEvent("screen_completed", meta: meta, elementId: elementId, reply: reply)
case .onboardingCompleted(let meta):
// Track successful onboarding completion
trackEvent("onboarding_completed", meta: meta)
case .unknown(let meta, let name):
// Handle unknown events
trackEvent(name, meta: meta)
// Handle other cases as needed
}
}
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
}
}