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

Başlamadan önce şunların hazır olduğundan emin olun:

  1. Adapty Android SDK 3.8.0 veya daha yeni bir sürümünü yüklediniz.
  2. Bir onboarding oluşturdunuz.
  3. Onboarding’i bir placement’a eklediniz.

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

Android uygulamanızdaki onboarding ekranında gerçekleşen süreçleri kontrol etmek veya izlemek için AdaptyOnboardingEventListener arayüzünü uygulayın.

Özel eylemler

Builder’da bir düğmeye custom (özel) eylem ekleyebilir ve buna bir ID atayabilirsiniz. Ardından bu ID’yi kodunuzda kullanarak özel eylem olarak işleyebilirsiniz.

ios-events-1.webp

Örneğin, bir kullanıcı Login veya Allow notifications gibi özel bir düğmeye dokunduğunda, onCustomAction delegate metodu builder’daki eylem ID’siyle tetiklenir. “allowNotifications” gibi kendi ID’lerinizi oluşturabilirsiniz.

class YourActivity : AppCompatActivity() {
    private val eventListener = object : AdaptyOnboardingEventListener {
        override fun onCustomAction(action: AdaptyOnboardingCustomAction, context: Context) {
            when (action.actionId) {
                "allowNotifications" -> {
                    // Request notification permissions
                }
            }
        }
        
        override fun onError(error: AdaptyOnboardingError, context: Context) {
            // Handle errors
        }
        
        // ... other required delegate methods
    }
}
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

Kullanıcı Close eylemi atanmış bir düğmeye dokunduğunda onboarding kapatılmış sayılır. Kullanıcı onboarding’i kapattığında ne olacağını yönetmeniz gerekir. Örneğin:

Kullanıcı onboarding’i kapattığında ne olacağını yönetmeniz gerekir. Örneğin onboarding’in kendisini ekrandan kaldırmanız gerekir.

Örneğin:

override fun onCloseAction(action: AdaptyOnboardingCloseAction, context: Context) {
    // Dismiss the onboarding screen
    (context as? Activity)?.onBackPressed()
}
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 bir paywall açmak istiyorsanız bu olayı işleyin. Paywall’u onboarding kapandıktan sonra açmak istiyorsanız daha basit bir yol var: AdaptyOnboardingCloseAction’ı işleyin ve olay verilerine bağlı kalmadan paywall’u açın.

Kullanıcı bir paywall açan düğmeye tıklarsa, manuel olarak belirlediğiniz 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 AdaptyOnboardingOpenPaywallAction sonrasında placement ID’sini kullanarak paywall’u hemen alıp açabilirsiniz:

override fun onOpenPaywallAction(action: AdaptyOnboardingOpenPaywallAction, context: Context) {
    // Get the paywall using the placement ID from the action
    Adapty.getPaywall(placementId = action.actionId) { result ->
        when (result) {
            is AdaptyResult.Success -> {
                val paywall = result.value
                // Get the paywall configuration
                AdaptyUI.getViewConfiguration(paywall) { result ->
                    when(result) {
                        is AdaptyResult.Success -> {
                            val paywallConfig = result.value
                            // Create and present the paywall
                            val paywallView = AdaptyUI.getPaywallView(
                                activity = this,
                                viewConfig = paywallConfig,
                                products,
                                eventListener = paywallEventListener
                            )
                            // Add the paywall view to your layout
                            binding.container.addView(paywallView)
                        }
                        is AdaptyResult.Error -> {
                            val error = result.error
                            // handle the error
                        }
                    }
                }
            is AdaptyResult.Error -> {
                val error = result.error
                // handle the 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üklemesinin tamamlanması

Onboarding yüklenmeyi tamamladığında bu metod çağrılır:

override fun onFinishLoading(action: AdaptyOnboardingLoadedAction, context: Context) {
    // 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
    }
}

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ının 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-posta adresi giriş alanı aracılığıyla toplandığında tetiklenir
OnboardingCompletedKullanıcı final ID’li bir ekrana ulaştığında tetiklenir. Bu olaya ihtiyaç duyuyorsanız son ekrana final ID’sini atayın.
UnknownTanınmayan herhangi bir olay türü için. name (bilinmeyen olayın adı) ve meta (ek meta veri) 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ı
screenClientIdGeçerli ekranın tanımlayıcısı
screenIndexAkıştaki geçerli ekranın konumu
totalScreensAkıştaki toplam ekran sayısı

Analitik olayları takip etmek için nasıl kullanabileceğinize dair bir örnek:

override fun onAnalyticsEvent(event: AdaptyOnboardingAnalyticsEvent, context: Context) {
    when (event) {
        is AdaptyOnboardingAnalyticsEvent.OnboardingStarted -> {
            // Track onboarding start
            trackEvent("onboarding_started", event.meta)
        }
        is AdaptyOnboardingAnalyticsEvent.ScreenPresented -> {
            // Track screen presentation
            trackEvent("screen_presented", event.meta)
        }
        is AdaptyOnboardingAnalyticsEvent.ScreenCompleted -> {
            // Track screen completion with user response
            trackEvent("screen_completed", event.meta, event.elementId, event.reply)
        }
        is AdaptyOnboardingAnalyticsEvent.OnboardingCompleted -> {
            // Track successful onboarding completion
            trackEvent("onboarding_completed", event.meta)
        }
        is AdaptyOnboardingAnalyticsEvent.Unknown -> {
            // Handle unknown events
            trackEvent(event.name, event.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
    }
}