iOS SDK'da onboarding verilerini işleme

Kullanıcılarınız bir test sorusunu yanıtladığında veya bir giriş alanına veri girdiğinde, onStateUpdatedAction metodu çağrılır. Alan türünü kodunuzda kaydedebilir veya işleyebilirsiniz.

Örneğin:

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
    }
}

action nesnesi şunları içerir:

ParametreAçıklama
elementIdGiriş öğesi için benzersiz bir tanımlayıcı. Soruları yanıtlarla ilişkilendirmek için kullanabilirsiniz.
paramsTür ve değer özelliklerini içeren kullanıcının giriş verisi nesnesi.
params.typeGiriş öğesinin türü. Şunlardan biri olabilir:
"select" - Seçeneklerden tek seçim
"multiSelect" - Seçeneklerden çoklu seçim
"input" - Metin giriş alanı
"datePicker" - Tarih seçimi
params.valueKullanıcının seçtiği veya girdiği değer(ler). Yapısı türe göre değişir:
select: id, value, label içeren nesne
multiSelect: id, value, label içeren nesnelerden oluşan dizi
input: type, value içeren nesne
datePicker: day, month, year içeren nesne
Kaydedilen veri örnekleri (uygulamanızda farklılık gösterebilir)
// 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
        }
    }
}

Kullanım senaryoları

Kullanıcı profillerini verilerle zenginleştirme

Giriş verilerini kullanıcı profiliyle hemen ilişkilendirmek ve aynı bilgiyi iki kez sormaktan kaçınmak istiyorsanız, aksiyonu işlerken kullanıcı profilini giriş verileriyle güncellemeniz gerekir.

Örneğin, kullanıcılardan name ID’li metin alanına adlarını girmelerini istiyorsunuz ve bu alanın değerini kullanıcının adı olarak kaydetmek istiyorsunuz. Ayrıca email alanına e-posta adreslerini girmelerini de istiyorsunuz. Uygulama kodunuzda bu şöyle görünebilir:

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)
        }
        
        do {
            try await Adapty.updateProfile(params: builder.build())
        } catch {
            // handle the error
        }
}

Yanıtlara göre paywallları özelleştirme

Onboardinglardaki testleri kullanarak, kullanıcıların onboarding’i tamamlamasının ardından gösterdiğiniz paywallları da özelleştirebilirsiniz.

Örneğin, kullanıcılara spor deneyimlerini sorabilir ve farklı kullanıcı gruplarına farklı CTA’lar ve ürünler gösterebilirsiniz.

  1. Onboarding oluşturucuya bir test ekleyin ve seçeneklere anlamlı ID’ler atayın.
experience.webp
  1. Test yanıtlarını ID’lerine göre işleyin ve kullanıcılar için özel nitelikler belirleyin.
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")
        }
        
        do {
            try await Adapty.updateProfile(params: builder.build())
        } catch {
            // handle the error
        }
    }
}
  1. Her özel nitelik değeri için segment oluşturun.
  2. Bir placement oluşturun ve oluşturduğunuz her segment için kitle ekleyin.
  3. Uygulama kodunuzda placement için bir paywall görüntüleyin. Onboarding’inizde paywall açan bir buton varsa, paywall kodunu bu butonun aksiyonuna verilen yanıt olarak uygulayın.