---
title: "Procesar datos de onboardings en Unity SDK"
description: "Guarda y usa datos de onboardings en tu app Unity con Adapty SDK."
---

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

Implementa el método `OnboardingViewOnStateUpdatedAction` en tu clase:

```csharp showLineNumbers title="Unity"
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnStateUpdatedAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string elementId,
        AdaptyOnboardingsStateUpdatedParams @params
    )
    {
        switch (@params) {
            case AdaptyOnboardingsSelectParams selectParams:
                // handle single selection
                break;
            case AdaptyOnboardingsMultiSelectParams multiSelectParams:
                // handle multiple selections
                break;
            case AdaptyOnboardingsInputParams inputParams:
                // handle text input
                break;
            case AdaptyOnboardingsDatePickerParams datePickerParams:
                // handle date selection
                break;
        }
    }
    
    // ... other interface methods
}
```

Los parámetros incluyen:

| Parámetro      | Descripción                                                                                                                                                                                                                                                                                     |
|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `elementId`    | Un identificador único para el elemento de entrada. Puedes usarlo para asociar preguntas con respuestas al guardarlas.                                                                                                                                                                          |
| `@params`       | El objeto con los datos de entrada del usuario. Puede ser uno de los siguientes tipos.                                                                                                                                                                                                         |
| `AdaptyOnboardingsSelectParams`  | Selección única entre opciones. Contiene `Id`, `Value`, `Label`                                                                           |
| `AdaptyOnboardingsMultiSelectParams` | Selecciones múltiples entre opciones. Contiene una lista de `Params` (cada uno con `Id`, `Value`, `Label`)<br/>• `input`: Objeto con `type`, `value`<br/>• `datePicker`: Objeto con `day`, `month`, `year` |
| `AdaptyOnboardingsInputParams` | Campo de entrada de texto. Contiene `Input`, que puede ser `AdaptyOnboardingsTextInput`, `AdaptyOnboardingsEmailInput` o `AdaptyOnboardingsNumberInput` |
| `AdaptyOnboardingsDatePickerParams` | Selección de fecha. Contiene `Day`, `Month`, `Year` opcionales |

<Details>
<summary>Ejemplos de datos guardados (pueden variar según tu implementación)</summary>

```javascript
// 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
        }
    }
}
```
</Details>

## Casos de uso \{#use-cases\}

### Enriquecer perfiles de usuario con datos \{#enrich-user-profiles-with-data\}

Si quieres vincular inmediatamente los datos de entrada con el perfil del usuario y evitar preguntarle dos veces por la misma información, necesitas [actualizar el perfil del usuario](unity-setting-user-attributes) con los datos de entrada 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 su nombre de pila. También les pides que introduzcan su correo electrónico en el campo `email`. En el código de tu app, puede verse así:

```csharp showLineNumbers title="Unity"
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnStateUpdatedAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string elementId,
        AdaptyOnboardingsStateUpdatedParams @params
    )
    {
        if (@params is AdaptyOnboardingsInputParams inputParams) {
            var builder = new AdaptyProfileParameters.Builder();
            
            switch (elementId) {
                case "name":
                    if (inputParams.Input is AdaptyOnboardingsTextInput textInput) {
                        builder.SetFirstName(textInput.Value);
                    }
                    break;
                case "email":
                    if (inputParams.Input is AdaptyOnboardingsEmailInput emailInput) {
                        builder.SetEmail(emailInput.Value);
                    }
                    break;
            }
            
            Adapty.UpdateProfile(builder.Build(), (error) => {
                if (error != null) {
                    // handle the error
                }
            });
        }
    }
    
    // ... other interface methods
}
```

### Personalizar paywalls según las respuestas \{#customize-paywalls-based-on-answers\}

Usando quizzes 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 diferentes CTAs y productos a distintos grupos de usuarios.

1. [Añade un quiz](onboarding-quizzes) en el editor de onboarding y asigna IDs significativos a sus opciones.

2. Gestiona las respuestas del quiz según sus IDs y [establece atributos personalizados](unity-setting-user-attributes) para los usuarios.

```csharp showLineNumbers title="Unity"
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
    public void OnboardingViewOnStateUpdatedAction(
        AdaptyUIOnboardingView view,
        AdaptyUIOnboardingMeta meta,
        string elementId,
        AdaptyOnboardingsStateUpdatedParams @params
    )
    {
        if (@params is AdaptyOnboardingsSelectParams selectParams) {
            var builder = new AdaptyProfileParameters.Builder();
            
            switch (elementId) {
                case "experience":
                    // set custom attribute 'experience' with the selected value (beginner, amateur, pro)
                    builder.SetCustomStringAttribute("experience", selectParams.Value);
                    break;
            }
            
            Adapty.UpdateProfile(builder.Build(), (error) => {
                if (error != null) {
                    // handle the error
                }
            });
        }
    }
    
    // ... other interface methods
}
```

3. [Crea segmentos](segments) para cada valor de atributo personalizado.
4. Crea un [placement](placements) y añade [audiencias](audience) para cada segmento que hayas creado.
5. [Muestra un paywall](unity-paywalls) 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](unity-handling-onboarding-events#opening-a-paywall).