---
title: "Android SDK'da onboarding olaylarını yönetme"
description: "Adapty kullanarak Android'de onboarding ile ilgili olayları yönetin."
---

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

1. [Adapty Android SDK](sdk-installation-android) 3.8.0 veya daha yeni bir sürümünü yüklediniz.
2. Bir [onboarding oluşturdunuz](create-onboarding).
3. Onboarding'i bir [placement](placements)'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 \{#custom-actions\}

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.

  <img src="/assets/shared/img/ios-events-1.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

Ö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.

```kotlin showLineNumbers
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
    }
}
```

<Details>
<summary>Olay örneği (Genişletmek için tıklayın)</summary>

```json
{
  "actionId": "allowNotifications",
  "meta": {
    "onboardingId": "onboarding_123",
    "screenClientId": "profile_screen",
    "screenIndex": 0,
    "screensTotal": 3
  }
}
```
</Details>

## Onboarding'i kapatma \{#closing-onboarding\}

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:

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

Örneğin:

```kotlin
override fun onCloseAction(action: AdaptyOnboardingCloseAction, context: Context) {
    // Dismiss the onboarding screen
    (context as? Activity)?.onBackPressed()
}
```

<Details>
<summary>Olay örneği (Genişletmek için tıklayın)</summary>

```json
{
  "action_id": "close_button",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "final_screen",
    "screen_index": 3,
    "total_screens": 4
  }
}
```

</Details>

## Paywall açma \{#opening-a-paywall\}

:::tip
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`](#closing-onboarding)'ı 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](get-paid-in-onboardings) 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:

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

<Details>
<summary>Olay örneği (Genişletmek için tıklayın)</summary>

```json
{
    "action_id": "premium_offer_1",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "pricing_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}
```

</Details>

## Onboarding yüklemesinin tamamlanması \{#finishing-loading-onboarding\}

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

```kotlin
override fun onFinishLoading(action: AdaptyOnboardingLoadedAction, context: Context) {
    // Handle loading completion
}
```

<Details>
<summary>Olay örneği (Genişletmek için tıklayın)</summary>

```json
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}
```

</Details>

## Navigasyon olayları \{#navigation-events\}

`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ür | Açıklama |
|------------|-------------|
| `OnboardingStarted` | Onboarding yüklendiğinde |
| `ScreenPresented` | Herhangi bir ekran gösterildiğinde |
| `ScreenCompleted` | Bir 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 |
| `UserEmailCollected` | Kullanıcının e-posta adresi giriş alanı aracılığıyla toplandığında tetiklenir |
| `OnboardingCompleted` | Kullanıcı `final` ID'li bir ekrana ulaştığında tetiklenir. Bu olaya ihtiyaç duyuyorsanız son ekrana `final` ID'sini atayın. |
| `Unknown` | Tanı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:
| Alan | Açıklama |
|------------|-------------|
| `onboardingId` | Onboarding akışının benzersiz tanımlayıcısı |
| `screenClientId` | Geçerli ekranın tanımlayıcısı |
| `screenIndex` | Akıştaki geçerli ekranın konumu |
| `totalScreens` | Akıştaki toplam ekran sayısı |

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

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

<Details>
<summary>Olay örnekleri (Genişletmek için tıklayın)</summary>

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

```

</Details>