Procesar datos de onboardings en el SDK de Android

Cuando tus usuarios responden a una pregunta de quiz o introducen datos en un campo de texto, se invocará el método onStateUpdatedAction. Puedes guardar o procesar el tipo de campo en tu código.

Por ejemplo:

override fun onStateUpdatedAction(action: AdaptyOnboardingStateUpdatedAction, context: Context) {
    // Store user preferences or responses
    when (val params = action.params) {
        is AdaptyOnboardingStateUpdatedParams.Select -> {
            // Handle single selection
        }
        is AdaptyOnboardingStateUpdatedParams.MultiSelect -> {
            // Handle multiple selections
        }
        is AdaptyOnboardingStateUpdatedParams.Input -> {
            // Handle text input
        }
        is AdaptyOnboardingStateUpdatedParams.DatePicker -> {
            // Handle date selection
        }
    }
}

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 del campo al gestionar la acción.

Por ejemplo, pides a los usuarios que introduzcan su nombre en el campo de texto con el ID name, y quieres establecer el valor de ese campo como el nombre de pila del usuario. También les pides que introduzcan su correo electrónico en el campo email. En el código de tu app, podría verse así:

override fun onStateUpdatedAction(action: AdaptyOnboardingStateUpdatedAction, context: Context) {
    // Store user preferences or responses
    when (val params = action.params) {
        is AdaptyOnboardingStateUpdatedParams.Input -> {
            // Handle text input
            val builder = AdaptyProfileParameters.Builder()
            
            // Map elementId to appropriate profile field
            when (action.elementId) {
                "name" -> {
                    when (val inputParams = params.params) {
                        is AdaptyOnboardingInputParams.Text -> {
                            builder.withFirstName(inputParams.value)
                        }
                    }
                }
                "email" -> {
                    when (val inputParams = params.params) {
                        is AdaptyOnboardingInputParams.Email -> {
                            builder.withEmail(inputParams.value)
                        }
                    }
                }
            }
            
            Adapty.updateProfile(builder.build()) { error ->
                if (error != null) {
                    // handle the error
                }
            }
        }
    }
}

Personalizar paywalls según las respuestas

Con los quizzes en los onboardings, también puedes personalizar los paywalls que muestras a los usuarios tras completar el onboarding.

Por ejemplo, puedes preguntarles sobre su experiencia deportiva y mostrar diferentes CTAs y productos a distintos grupos de usuarios.

  1. Añade un quiz en el constructor de onboarding y asigna IDs significativos a sus opciones.
experience.webp
  1. Gestiona las respuestas del quiz según sus IDs y establece atributos personalizados para los usuarios.
override fun onStateUpdatedAction(action: AdaptyOnboardingStateUpdatedAction, context: Context) {
    // Handle quiz responses and set custom attributes
    when (val params = action.params) {
        is AdaptyOnboardingStateUpdatedParams.Select -> {
            // Handle quiz selection
            val builder = AdaptyProfileParameters.Builder()
            
            // Map quiz responses to custom attributes
            when (action.elementId) {
                "experience" -> {
                    // Set custom attribute 'experience' with the selected value (beginner, amateur, pro)
                    builder.withCustomAttribute("experience", params.params.value)
                }
            }
            
            Adapty.updateProfile(builder.build()) { error ->
                if (error != null) {
                    // handle the error
                }
            }
        }
    }
}
  1. Crea segmentos para cada valor de atributo personalizado.
  2. Crea un placement y añade audiencias para cada segmento que hayas creado.
  3. 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.