iOS SDK'da onboarding olaylarını yönetme

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  1. Adapty iOS SDK 3.8.0 veya daha yenisi yüklü olmalıdır.
  2. Bir onboarding oluşturmuş olmalısınız.
  3. Onboarding’i bir placement’a eklemiş olmalısınız.

Builder ile yapılandırılan onboarding’ler, uygulamanızın tepki verebileceği olaylar üretir. Bu olaylara nasıl tepki vereceğinizi aşağıda öğrenin.

Mobil uygulamanızdaki onboarding ekranında gerçekleşen süreçleri kontrol etmek veya izlemek için AdaptyOnboardingControllerDelegate metodlarını uygulayın.

Özel eylemler

Builder’da bir düğmeye özel bir eylem ekleyip bu eyleme bir ID atayabilirsiniz.

ios-events-1.webp

Bu ID’yi kodunuzda kullanarak özel bir eylem olarak işleyebilirsiniz. Örneğin, bir kullanıcı Login veya Allow notifications gibi özel bir düğmeye dokunduğunda, delegate metodu onboardingController, .custom(id:) durumuyla tetiklenir ve actionId parametresi builder’daki Action ID’dir. “allowNotifications” gibi kendi ID’lerinizi oluşturabilirsiniz.

func onboardingController(_ controller: AdaptyOnboardingController, onCustomAction action: AdaptyOnboardingsCustomAction) {
    if action.actionId == "allowNotifications" {
        // Request notification permissions
    }
}
    
func onboardingController(_ controller: AdaptyOnboardingController, didFailWithError error: AdaptyUIError) {
    // Handle errors
}
Olay örneği (Genişletmek için tıklayın)
{
  "actionId": "allowNotifications",
  "meta": {
    "onboardingId": "onboarding_123",
    "screenClientId": "profile_screen",
    "screenIndex": 0,
    "screensTotal": 3
  }
}

Onboarding’i kapatma

Bir kullanıcı Close eylemi atanmış bir düğmeye dokunduğunda onboarding kapatılmış sayılır.

ios-events-2.webp

Kullanıcı onboarding’i kapattığında ne olacağını siz yönetmeniz gerektiğini unutmayın. Örneğin, onboarding’in kendisini görüntülemeyi durdurmanız gerekir.

Örneğin:

func onboardingController(_ controller: AdaptyOnboardingController, onCloseAction action: AdaptyOnboardingsCloseAction) {
    controller.dismiss(animated: true)
}
Olay örneği (Genişletmek için tıklayın)
{
  "action_id": "close_button",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "final_screen",
    "screen_index": 3,
    "total_screens": 4
  }
}

Paywall açma

Onboarding içinde paywall açmak istiyorsanız bu olayı işleyin. Paywall’u onboarding kapandıktan sonra açmak istiyorsanız daha kolay bir yol var — AdaptyOnboardingsCloseAction’ı işleyip olay verisine bağlı kalmadan paywall’u açabilirsiniz.

Bir kullanıcı paywall açan bir düğmeye tıkladığında, manuel olarak ayarladığınız düğme eylem ID’sini alırsınız. Onboarding’lerde paywall’larla çalışmanın en sorunsuz yolu, eylem ID’sini bir paywall placement ID’sine eşit yapmaktır. Bu sayede AdaptyOnboardingsOpenPaywallAction sonrasında placement ID’yi kullanarak paywall’u hemen alıp açabilirsiniz.

Ekranda aynı anda yalnızca bir görünümün (paywall veya onboarding) görüntülenebileceğini unutmayın. Bir onboarding’in üzerine paywall sunarsanız arka plandaki onboarding’i programatik olarak kontrol edemezsiniz. Onboarding’i kapatmaya çalışmak bunun yerine paywall’u kapatır ve onboarding görünür kalır. Bunu önlemek için paywall’u sunmadan önce her zaman onboarding görünümünü kapatın.

func onboardingController(_ controller: AdaptyOnboardingController, onPaywallAction action: AdaptyOnboardingsOpenPaywallAction) {
    // Dismiss onboarding before presenting paywall
    controller.dismiss(animated: true) {
        Task {
            do {
                // Get the paywall using the placement ID from the action
                let paywall = try await Adapty.getPaywall(placementId: action.actionId)
                
                // Get the paywall configuration
                let paywallConfig = try await AdaptyUI.getPaywallConfiguration(
                    forPaywall: paywall
                )
                
                // Create and present the paywall controller
                let paywallController = try AdaptyUI.paywallController(
                    with: paywallConfig,
                    delegate: self
                )
                
                // Present the paywall from the root view controller
                if let rootVC = UIApplication.shared.windows.first?.rootViewController {
                    rootVC.present(paywallController, animated: true)
                }
            } catch {
                // Handle any errors that occur during paywall loading
                print("Failed to present paywall: \(error)")
            }
        }
    }
}
Olay örneği (Genişletmek için tıklayın)
{
    "action_id": "premium_offer_1",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "pricing_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

Onboarding yüklemesini tamamlama

Bir onboarding yüklemeyi tamamladığında bu metod çağrılır:

func onboardingController(_ controller: AdaptyOnboardingController, didFinishLoading action: OnboardingsDidFinishLoadingAction) {
    // Handle loading completion
}
Olay örneği (Genişletmek için tıklayın)
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}

Navigasyonu izleme

onAnalyticsEvent metodu, onboarding akışı sırasında çeşitli analitik olaylar gerçekleştiğinde çağrılır.

event nesnesi aşağıdaki türlerden biri olabilir:

TürAçıklama
onboardingStartedOnboarding yüklendiğinde
screenPresentedHerhangi bir ekran gösterildiğinde
screenCompletedBir ekran tamamlandığında. İsteğe bağlı elementId (tamamlanan öğenin tanımlayıcısı) ve isteğe bağlı reply (kullanıcıdan gelen yanıt) içerir. Kullanıcılar ekrandan çıkmak için herhangi bir eylem gerçekleştirdiğinde tetiklenir.
secondScreenPresentedİkinci ekran gösterildiğinde
userEmailCollectedKullanıcının e-postası giriş alanı üzerinden toplandığında tetiklenir
onboardingCompletedKullanıcı final ID’sine sahip bir ekrana ulaştığında tetiklenir. Bu olaya ihtiyacınız varsa son ekrana final ID’sini atayın.
unknownTanınmayan herhangi bir olay türü için. name (bilinmeyen olayın adı) ve meta (ek metadata) içerir

Her olay şu alanları içeren meta bilgisi barındırır:

AlanAçıklama
onboardingIdOnboarding akışının benzersiz tanımlayıcısı
screenClientIdMevcut ekranın tanımlayıcısı
screenIndexAkıştaki mevcut ekranın konumu
screensTotalAkıştaki toplam ekran sayısı

Analitik olayları izleme amacıyla nasıl kullanabileceğinize dair bir örnek:

func onboardingController(_ controller: AdaptyOnboardingController, onAnalyticsEvent event: AdaptyOnboardingsAnalyticsEvent) {
    switch event {
    case .onboardingStarted(let meta):
        // Track onboarding start
        trackEvent("onboarding_started", meta: meta)
    case .screenPresented(let meta):
        // Track screen presentation
        trackEvent("screen_presented", meta: meta)
    case .screenCompleted(let meta, let elementId, let reply):
        // Track screen completion with user response
        trackEvent("screen_completed", meta: meta, elementId: elementId, reply: reply)
    case .onboardingCompleted(let meta):
        // Track successful onboarding completion
        trackEvent("onboarding_completed", meta: meta)
    case .unknown(let meta, let name):
        // Handle unknown events
        trackEvent(name, meta: meta)
    // Handle other cases as needed
    }
}
Olay örnekleri (Genişletmek için tıklayın)
// onboardingStarted
{
  "name": "onboarding_started",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "welcome_screen",
    "screen_index": 0,
    "total_screens": 4
  }
}

// screenPresented

{
    "name": "screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "interests_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

// screenCompleted

{
    "name": "screen_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    },
    "params": {
        "element_id": "profile_form",
        "reply": "success"
    }
}

// secondScreenPresented

{
    "name": "second_screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// userEmailCollected

{
    "name": "user_email_collected",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// onboardingCompleted

{
    "name": "onboarding_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "final_screen",
        "screen_index": 3,
        "total_screens": 4
    }
}