Descripción general
Este tutorial te muestra cómo crear un carrusel de onboarding de múltiples pasos usando un único Mensaje In-App HTML. A diferencia de los carruseles tradicionales que dependen de gestos de deslizamiento, este enfoque usa navegación por botones y mantiene todos los pasos dentro de un solo mensaje. Lo que construirás:- Un flujo de onboarding de dos pasos con imágenes, texto y botones
- Navegación por botones (toca “Siguiente” para avanzar, toca “Comenzar” para cerrar)
- Puntos indicadores de progreso
- Transiciones suaves de desvanecimiento entre pasos
- Guiar a los usuarios a través de un flujo corto de onboarding o educación (2-5 pasos)
- Requerir que los usuarios toquen explícitamente un botón para continuar (sin gestos de deslizamiento)
- Mantener todo dentro de un único Mensaje In-App HTML para simplificar
- Cerrar el mensaje automáticamente cuando el flujo se complete
Esta guía usa un Mensaje In-App HTML para control total. También puedes construir flujos de onboarding basados en tarjetas con el editor de arrastrar y soltar—esas tarjetas son deslizables pero ofrecen menos personalización.
Requisitos previos
Antes de comenzar, asegúrate de tener:- Una aplicación OneSignal activa con Mensajes In-App habilitados
- Permiso para crear o editar Mensajes In-App HTML
- Mobile SDK instalado en tu aplicación móvil
- Comprensión básica de HTML, CSS y JavaScript
Cómo funciona el flujo de múltiples pasos
Antes de profundizar en el código, es importante entender el enfoque técnico. Esta implementación usa un único Mensaje In-App HTML que cambia entre pasos mostrando y ocultando contenido, no cargando múltiples mensajes separados. La arquitectura se basa en cuatro componentes principales:Contenedores de tarjeta para cada paso
Cada paso está envuelto en un
<div> con la clase card y un ID único:- Todas las tarjetas existen simultáneamente en el DOM
- Solo una tarjeta es visible a la vez (controlada por la clase
active)
Control de visibilidad con CSS
CSS maneja la lógica de mostrar/ocultar usando opacidad y eventos de puntero:Por qué esto importa:
opacity: 0oculta la tarjeta visualmente pero la mantiene en el diseñopointer-events: nonepreviene clics accidentales en tarjetas ocultastransitioncrea efectos suaves de desvanecimiento
Gestión de estado con JavaScript
La función Esta función:
setActive(i) controla qué tarjeta es visible:- Elimina
activede todas las tarjetas - Agrega
activea la tarjeta objetivo - Actualiza los puntos indicadores de progreso
Información clave: Este es un patrón de aplicación de página única (SPA) dentro de un Mensaje In-App. Todo el contenido se carga una vez, y JavaScript gestiona los cambios de estado sin recargar.
Paso 1: Crear un nuevo Mensaje In-App HTML
- En el panel de OneSignal, ve a Messages → In-App Messages
- Haz clic en New In-App Message
- Selecciona HTML como tipo de mensaje
- Elige un diseño Full Screen o Large (recomendado para onboarding para maximizar el impacto visual)
- Continúa al editor HTML
La vista previa del editor HTML puede no reflejar completamente el comportamiento en tiempo de ejecución. Siempre prueba en un dispositivo real o usuario de prueba para verificar animaciones, comportamiento de botones y la acción de cierre.
Paso 2: Agregar la plantilla HTML
Reemplaza el contenido del editor con la plantilla a continuación. Esta plantilla incluye:- Código autocontenido: Todo el HTML, CSS y JavaScript en un archivo
- Navegación por botones: Sin gestos de deslizamiento (más confiable en diferentes dispositivos)
- Transiciones de desvanecimiento: Cambios suaves de opacidad entre pasos
- Integración con SDK de OneSignal: Usa
OneSignalIamApi.close(e)para cerrar el mensaje - Optimizado para móvil: Diseño responsive con meta tag de viewport
Ver plantilla HTML completa
Ver plantilla HTML completa
Paso 3: Personalizar tu contenido
Seguro para personalizar
Puedes modificar estos elementos sin romper la funcionalidad: Contenido:- Texto del título en etiquetas
<h1> - Texto del cuerpo en etiquetas
<p> - Etiquetas de botones (
Siguiente,Comenzar) - URLs de imágenes en los estilos
background-image: url('...')
- Colores: Cambia el fondo de
.btn, color de texto o colores de puntos - Espaciado: Ajusta padding y márgenes
- Tipografía: Modifica font-family, font-size, font-weight
- Radio de borde: Actualiza valores de
border-radiuspara botones e imágenes
Agregar más pasos
Para agregar un tercer paso, sigue este patrón:- Agregar la tarjeta HTML:
- Agregar un punto de progreso:
- Actualizar la función
setActive():
- Actualizar el ID del botón del paso anterior:
Cambia
id="done"aid="next-1"en el botón de la tarjeta 1, luego agrega un listener de clic:
- Agregar el botón de cierre a la nueva última tarjeta (card-2):
Paso 4: Probar el Mensaje In-App
Lista de verificación de pruebas
- Guarda el mensaje en el panel de OneSignal
- Configura los ajustes de entrega:
- Establece condiciones de activación (ej., inicio de sesión, vista de página específica)
- Elige tu audiencia objetivo o selecciona un usuario de prueba
- Envía a un dispositivo de prueba:
- Usa Usuarios de prueba para previsualizar sin afectar usuarios de producción
- Instala tu app en un dispositivo físico (recomendado sobre simuladores para comportamiento preciso)
- Verifica la funcionalidad:
- ✓ La primera tarjeta aparece con contenido correcto
- ✓ El botón “Siguiente” avanza a la tarjeta 2
- ✓ Los puntos de progreso se actualizan correctamente
- ✓ Las transiciones de desvanecimiento son suaves
- ✓ El botón “Comenzar” cierra el mensaje
- ✓ El mensaje no reaparece inmediatamente (verifica configuración de límite de frecuencia)
Los simuladores/emuladores pueden no reflejar con precisión el comportamiento del dispositivo real, especialmente para interacciones táctiles e integraciones de SDK. Siempre prueba en dispositivos físicos antes de lanzar a producción.
Solución de problemas comunes
| Problema | Causa probable | Solución |
|---|---|---|
| El mensaje no aparece | Condiciones de activación no cumplidas | Verifica los Disparadores de Mensajes In-App y confirma que tu usuario de prueba cumple los criterios |
| Los botones no funcionan | Errores de JavaScript o IDs no coinciden | Revisa la consola del navegador por errores; verifica que los IDs de botones coincidan con los IDs de listeners |
| Las imágenes no cargan | Problemas de CORS o URLs inválidas | Usa URLs HTTPS; prueba las URLs de imágenes en un navegador primero |
| El mensaje aparece pero no se cierra | SDK de OneSignal no cargado | Verifica que la configuración del Mobile SDK esté completa |
Próximos pasos
Rastrear engagement de usuarios:- Agrega seguimiento de clics usando atributos
data-onesignal-unique-label(ya incluidos en la plantilla) para medir abandono entre pasos - Ve las analíticas de clics en Messages → In-App Messages → [Tu mensaje] → Analytics
- Etiqueta usuarios que completen el onboarding (ej.,
onboarding_completed: true) - Usa etiquetas para segmentar usuarios y prevenir que se muestre nuevamente el flujo de onboarding
- Agrega datos de usuario para personalizar contenido en mensajes futuros
- Deep link a usuarios a una pantalla específica después del cierre
- Usa sintaxis Liquid para personalizar títulos con nombres de usuario o atributos
- Implementa pruebas A/B con diferentes flujos de onboarding para optimizar tasas de finalización