Procesar datos de onboardings en Capacitor SDK
Los onboardings están obsoletos en SDK v4 y se eliminarán en una versión futura. Ya no reciben correcciones ni mejoras. Usa flows en su lugar: a diferencia de los onboardings, que se ejecutan dentro de un WebView, los flows se renderizan de forma nativa en el dispositivo, lo que ofrece animaciones más fluidas, un aspecto nativo consistente, tiempos de carga más rápidos y sin dependencia del tiempo de ejecución de WebView. Consulta Obtener flows y paywalls y Mostrar flows y paywalls para empezar.
Cuando tus usuarios responden a una pregunta del quiz o introducen datos en un campo de texto, se invocará el método onStateUpdated. Puedes guardar o procesar el tipo de campo en tu código.
Por ejemplo:
view.setEventHandlers({
onStateUpdated(action, meta) {
// Process data
},
});
Consulta el formato de la acción aquí.
Ejemplos de datos guardados (el formato puede variar según tu implementación)
// Example of a saved select action
{
"elementId": "preference_selector",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "preferences_screen",
"screenIndex": 1,
"screensTotal": 3
},
"params": {
"type": "select",
"value": {
"id": "option_1",
"value": "premium",
"label": "Premium Plan"
}
}
}
// Example of a saved multi-select action
{
"elementId": "interests_selector",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "interests_screen",
"screenIndex": 2,
"screensTotal": 3
},
"params": {
"type": "multiSelect",
"value": [
{
"id": "interest_1",
"value": "sports",
"label": "Sports"
},
{
"id": "interest_2",
"value": "music",
"label": "Music"
}
]
}
}
// Example of a saved input action
{
"elementId": "name_input",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
},
"params": {
"type": "input",
"value": {
"type": "text",
"value": "John Doe"
}
}
}
// Example of a saved date picker action
{
"elementId": "birthday_picker",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
},
"params": {
"type": "datePicker",
"value": {
"day": 15,
"month": 6,
"year": 1990
}
}
}Casos de uso
Enriquecer perfiles de usuario con datos
Si quieres vincular inmediatamente los datos introducidos con el perfil del usuario y evitar pedirle la misma información dos veces, necesitas actualizar el perfil del usuario con los datos introducidos al gestionar la acción.
Por ejemplo, si pides a los usuarios que introduzcan su nombre en el campo de texto con el ID name y quieres establecer ese valor como nombre del usuario, y además les pides que introduzcan su correo electrónico en el campo email, en el código de tu app puede quedar así:
view.setEventHandlers({
onStateUpdated(action, meta) {
// Store user preferences or responses
if (action.elementType === 'input') {
const profileParams: any = {};
// Map elementId to appropriate profile field
switch (action.elementId) {
case 'name':
if (action.value.type === 'text') {
profileParams.firstName = action.value.value;
}
break;
case 'email':
if (action.value.type === 'email') {
profileParams.email = action.value.value;
}
break;
}
// Update profile if we have data to update
if (Object.keys(profileParams).length > 0) {
adapty.updateProfile({ params: profileParams }).catch((error) => {
// handle the error
});
}
}
},
});
Personalizar paywalls según las respuestas
Con los cuestionarios en los onboardings, también puedes personalizar los paywalls que muestras a los usuarios después de que completen el onboarding.
Por ejemplo, puedes preguntarles sobre su experiencia con el deporte y mostrar distintas CTAs y productos a diferentes grupos de usuarios.
- Añade un cuestionario en el editor de onboarding y asigna IDs significativos a sus opciones.
- Gestiona las respuestas del cuestionario según sus IDs y establece atributos personalizados para los usuarios.
view.setEventHandlers({
onStateUpdated(action, meta) {
// Handle quiz responses and set custom attributes
if (action.elementType === 'select') {
const profileParams: any = {};
// Map quiz responses to custom attributes
switch (action.elementId) {
case 'experience':
// Set custom attribute 'experience' with the selected value (beginner, amateur, pro)
profileParams.codableCustomAttributes = {
experience: action.value.value
};
break;
}
// Update profile if we have data to update
if (Object.keys(profileParams).length > 0) {
adapty.updateProfile({ params: profileParams }).catch((error) => {
// handle the error
});
}
}
},
});
- Crea segmentos para cada valor de atributo personalizado.
- Crea un placement y añade audiencias para cada segmento que hayas creado.
- Muestra un paywall para el placement en el código de tu app. Si tu onboarding tiene un botón que abre un paywall, implementa el código del paywall como respuesta a la acción de ese botón.