Traiter les données des onboardings dans iOS SDK
Les onboardings sont dépréciés à partir du SDK Adapty v4. Créez des flows à la place : contrairement aux onboardings, qui s’exécutent dans une WebView, les flows s’affichent nativement sur l’appareil — animations plus fluides, aspect natif cohérent, temps de chargement réduits et aucune dépendance à l’environnement WebView.
Lorsque vos utilisateurs répondent à une question de quiz ou saisissent des données dans un champ de saisie, la méthode onStateUpdatedAction est appelée. Vous pouvez enregistrer ou traiter le type de champ dans votre code.
Par exemple :
func onboardingController(_ controller: AdaptyOnboardingController, onStateUpdatedAction action: AdaptyOnboardingsStateUpdatedAction) {
// Store user preferences or responses
switch action.params {
case .select(let params):
// Handle single selection
case .multiSelect(let params):
// Handle multiple selections
case .input(let params):
// Handle text input
case .datePicker(let params):
// Handle date selection
}
}
L’objet action contient :
| Paramètre | Description |
|---|---|
elementId | Identifiant unique de l’élément de saisie. Vous pouvez l’utiliser pour associer les questions aux réponses lors de leur enregistrement. |
params | Objet de données de saisie de l’utilisateur contenant les propriétés type et value. |
params.type | Le type d’élément de saisie. Peut être : • "select" - Sélection unique parmi les options• "multiSelect" - Sélections multiples parmi les options• "input" - Champ de saisie de texte• "datePicker" - Sélection de date |
params.value | La ou les valeurs sélectionnées ou saisies par l’utilisateur. La structure dépend du type : • select : Objet avec id, value, label• multiSelect : Tableau d’objets avec id, value, label• input : Objet avec type, value• datePicker : Objet avec day, month, year |
Exemples de données sauvegardées (peuvent différer selon votre implémentation)
// 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
}
}
} Cas d’utilisation
Enrichir les profils utilisateurs avec des données
Si vous souhaitez immédiatement associer les données saisies au profil utilisateur et éviter de leur demander deux fois la même information, vous devez mettre à jour le profil utilisateur avec les données saisies lors du traitement de l’action.
Par exemple, vous demandez aux utilisateurs de saisir leur nom dans le champ texte avec l’ID name, et vous souhaitez définir la valeur de ce champ comme prénom de l’utilisateur. Vous leur demandez également de saisir leur e-mail dans le champ email. Dans le code de votre application, cela peut ressembler à ceci :
func onboardingController(_ controller: AdaptyOnboardingController, onStateUpdatedAction action: AdaptyOnboardingsStateUpdatedAction) {
// Store user preferences or responses
switch action.params {
case .input(let params):
// Handle text input
let builder = AdaptyProfileParameters.Builder()
// Map elementId to appropriate profile field
switch action.elementId {
case "name":
builder.with(firstName: params.value.value)
case "email":
builder.with(email: params.value.value)
default:
break
}
// Delegate methods are synchronous; kick off the async update in a Task.
Task {
do {
try await Adapty.updateProfile(params: builder.build())
} catch {
// handle the error
}
}
default:
break
}
}
Personnaliser les paywalls en fonction des réponses
Grâce aux quiz dans les onboardings, vous pouvez aussi personnaliser les paywalls affichés aux utilisateurs après qu’ils ont terminé l’onboarding.
Par exemple, vous pouvez interroger les utilisateurs sur leur expérience sportive et afficher des CTA et des produits différents selon les groupes d’utilisateurs.
- Ajoutez un quiz dans le builder d’onboarding et attribuez des IDs significatifs à ses options.
- Gérez les réponses au quiz en fonction de leurs IDs et définissez des attributs personnalisés pour les utilisateurs.
func onboardingController(_ controller: AdaptyOnboardingController, onStateUpdatedAction action: AdaptyOnboardingsStateUpdatedAction) {
// Handle quiz responses and set custom attributes
switch action.params {
case .select(let params):
// Handle quiz selection
let builder = AdaptyProfileParameters.Builder()
// Map quiz responses to custom attributes
switch action.elementId {
case "experience":
// Set custom attribute 'experience' with the selected value (beginner, amateur, pro)
try? builder.with(customAttribute: params.value.value, forKey: "experience")
default:
break
}
// Delegate methods are synchronous; kick off the async update in a Task.
Task {
do {
try await Adapty.updateProfile(params: builder.build())
} catch {
// handle the error
}
}
default:
break
}
}
- Créez des segments pour chaque valeur d’attribut personnalisé.
- Créez un placement et ajoutez des audiences pour chaque segment créé.
- Affichez un paywall pour le placement dans le code de votre application. Si votre onboarding comporte un bouton qui ouvre un paywall, implémentez le code du paywall en réponse à l’action de ce bouton.