---
title: "Android - Yeni Paywall Builder paywalllarını sunma"
description: "Etkili para kazanım için Android'de paywallları nasıl sunacağınızı öğrenin."
---

Paywall Builder ile bir paywall özelleştirdiyseniz, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Böyle bir paywall, paywall içinde neyin gösterileceğini ve nasıl gösterileceğini zaten içerir.

:::warning

Bu rehber yalnızca SDK v3.0 gerektiren **yeni Paywall Builder paywallları** içindir. Paywall sunma süreci, Paywall Builder'ın farklı sürümleriyle tasarlanan paywalllar, remote config paywalllar ve [Observer modu](observer-vs-full-mode) için farklılık gösterir.

- **Remote config paywalllarını** sunmak için bkz. [Remote config ile tasarlanan paywall'ı render etme](present-remote-config-paywalls).
- **Observer modu paywalllarını** sunmak için bkz. [Android - Observer modunda Paywall Builder paywalllarını sunma](android-present-paywall-builder-paywalls-in-observer-mode)

:::

Aşağıda kullanılan `viewConfiguration` nesnesini edinmek için bkz. [Paywall Builder paywalllarını ve yapılandırmalarını getirme](android-get-pb-paywalls).

<Tabs groupId="current-os" queryString>
<TabItem value="views" label="Views" default>

Görsel paywall'ı cihaz ekranında göstermek için önce yapılandırmanız gerekir. Bunun için `AdaptyUI.getPaywallView()` metodunu çağırın veya `AdaptyPaywallView`'i doğrudan oluşturun:

<Tabs groupId="current-os" queryString>
  <TabItem value="kotlin" label="Kotlin (option 1)" default>

```kotlin showLineNumbers
   val paywallView = AdaptyUI.getPaywallView(
       activity,
       viewConfiguration,
       products,
       eventListener,
       insets,
       personalizedOfferResolver,
       tagResolver,
       timerResolver,
   )
```
</TabItem>
<TabItem value="kotlin2" label="Kotlin (option 2)" default>

```kotlin showLineNumbers
   val paywallView =
        AdaptyPaywallView(activity) // or retrieve it from xml
   ...
   with(paywallView) {
       showPaywall(
           viewConfiguration,
           products,
					 eventListener,
           insets,
           personalizedOfferResolver,
           tagResolver,
           timerResolver,
       )
   }
```

</TabItem>
<TabItem value="java" label="Java (option 1)" default>

```java showLineNumbers
AdaptyPaywallView paywallView = AdaptyUI.getPaywallView(
        activity,
        viewConfiguration,
        products,
        eventListener,
        insets,
        personalizedOfferResolver,
        tagResolver,
        timerResolver
);
```
</TabItem>
<TabItem value="java2" label="Java (option 2)" default>

```java showLineNumbers
AdaptyPaywallView paywallView =
  new AdaptyPaywallView(activity); //add to the view hierarchy if needed, or you receive it from xml
...
paywallView.showPaywall(viewConfiguration, products, eventListener, insets, personalizedOfferResolver, tagResolver, timerResolver);
```

</TabItem>
<TabItem value="XML" label="XML" default>

```xml showLineNumbers
<com.adapty.ui.AdaptyPaywallView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
```
</TabItem>
</Tabs>

View başarıyla oluşturulduktan sonra view hiyerarşisine ekleyebilir ve cihaz ekranında görüntüleyebilirsiniz.

`AdaptyPaywallView`'i `AdaptyUI.getPaywallView()` çağrısı _olmadan_ edinirseniz, `.showPaywall()` metodunu da ayrıca çağırmanız gerekir.

</TabItem>
<TabItem value="compose" label="Jetpack Compose" default>

Görsel paywall'ı cihaz ekranında göstermek için önce yapılandırmanız gerekir. Bunun için şu composable fonksiyonu kullanın:

```kotlin showLineNumbers
AdaptyPaywallScreen(
    viewConfiguration,
    products,
    eventListener,
    insets,
    personalizedOfferResolver,
    tagResolver,
    timerResolver,
)
```
</TabItem>
</Tabs>

İstek parametreleri:

| Parametre                     | Zorunluluk | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| :---------------------------- | :--------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **viewConfiguration**         | zorunlu    | Paywallın görsel ayrıntılarını içeren bir `AdaptyUI.LocalizedViewConfiguration` nesnesi sağlayın. Yüklemek için `Adapty.getViewConfiguration(paywall)` metodunu kullanın. Daha fazla bilgi için [Paywall'ın görsel yapılandırmasını getirme](android-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) konusuna bakın.                                                                                                          |
| **products**                  | isteğe bağlı | Ekranda ürünlerin gösterim zamanlamasını optimize etmek için bir `AdaptyPaywallProduct` dizisi sağlayın. `null` geçilirse AdaptyUI gerekli ürünleri otomatik olarak getirir.                                                                                                                                                                                                                                                                                          |
| **eventListener**             | isteğe bağlı | Paywall olaylarını izlemek için bir `AdaptyUiEventListener` sağlayın. Kullanım kolaylığı için `AdaptyUiDefaultEventListener`'ı genişletmeniz önerilir. Daha fazla bilgi için [Paywall olaylarını yönetme](android-handling-events) konusuna bakın.                                                                                                                                                                                                                   |
| **insets**                    | isteğe bağlı | <p>Insets, tıklanabilir öğelerin sistem çubukları arkasında gizlenmesini engelleyen paywall etrafındaki boşluklardır.</p><p>Varsayılan: `UNSPECIFIED`; bu durumda Adapty kenar-kenara paywalllar için harika çalışan insets'leri otomatik olarak ayarlar.</p><p>Paywallınız kenar-kenara değilse özel insets ayarlamak isteyebilirsiniz. Bunu nasıl yapacağınızı öğrenmek için aşağıdaki [Paywall insets'lerini değiştirme](android-present-paywalls#change-paywall-insets) bölümüne bakın.</p> |
| **personalizedOfferResolver** | isteğe bağlı | Kişiselleştirilmiş fiyatlandırmayı ([daha fazla bilgi](https://developer.android.com/google/play/billing/integrate#personalized-price)) belirtmek için `AdaptyUiPersonalizedOfferResolver`'ı uygulayın ve `AdaptyPaywallProduct`'ı ürün fiyatı kişiselleştirilmişse `true`, değilse `false` olarak eşleştiren kendi mantığınızı geçirin.                                                                                                                              |
| **tagResolver**               | isteğe bağlı | Paywall metnindeki özel etiketleri çözümlemek için `AdaptyUiTagResolver` kullanın. Bu çözümleyici bir etiket parametresi alır ve bunu karşılık gelen bir dizeye dönüştürür. Daha fazla bilgi için [Paywall Builder'da özel etiketler](custom-tags-in-paywall-builder) konusuna bakın.                                                                                                                                                                                 |
| **timerResolver**             | isteğe bağlı | Özel zamanlayıcı işlevselliği kullanacaksanız çözümleyiciyi buraya geçirin.                                                                                                                                                                                                                                                                                                                                                                                         |

:::tip

Adapty SDK'nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall'ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren [örnek uygulamalarımıza](sample-apps) göz atın.

:::

## Paywall insets'lerini değiştirme \{#change-paywall-insets\}

Insets, tıklanabilir öğelerin sistem çubukları arkasında gizlenmesini engelleyen paywall etrafındaki boşluklardır. Varsayılan olarak Adapty, kenar-kenara paywalllar için harika çalışan insets'leri otomatik olarak ayarlar.

Paywallınız kenar-kenara değilse özel insets ayarlamak isteyebilirsiniz:

- `AdaptyPaywallView` ile ne durum çubuğu ne de gezinme çubuğu çakışmıyorsa `AdaptyPaywallInsets.NONE` kullanın.
- Paywallınız üst durum çubuğuyla çakışıyor ama alt kısımla çakışmıyorsa gibi daha özel durumlarda, aşağıdaki örnekte gösterildiği gibi yalnızca `bottomInset`'i `0` olarak ayarlayabilirsiniz:

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>
```kotlin showLineNumbers

//create extension function
fun View.onReceiveSystemBarsInsets(action: (insets: Insets) -> Unit) {
    ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
        val systemBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
        ViewCompat.setOnApplyWindowInsetsListener(this, null)
        action(systemBarInsets)
        insets
    }
}
//and then use it with the view
paywallView.onReceiveSystemBarsInsets { insets ->
    val paywallInsets = AdaptyPaywallInsets.vertical(insets.top, 0)
    paywallView.showPaywall(
           viewConfiguration,
           products,
					 eventListener,
           paywallInsets,
           personalizedOfferResolver,
           tagResolver,
           timerResolver,
       )
}
```
</TabItem>
<TabItem value="java" label="Java" default>
```java showLineNumbers

...

ViewCompat.setOnApplyWindowInsetsListener(paywallView, (view, insets) -> {
    Insets systemBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars());
    ViewCompat.setOnApplyWindowInsetsListener(paywallView, null);
  
    AdaptyPaywallInsets paywallInsets =
                AdaptyPaywallInsets.of(systemBarInsets.top, 0);
    paywallView.showPaywall(paywall, products, viewConfiguration, paywallInsets, productTitleResolver);
            
    return insets;
});
```
</TabItem>
</Tabs> 

## Geliştirici tanımlı zamanlayıcı kullanma \{#use-developer-defined-timer\}

Mobil uygulamanızda geliştirici tanımlı zamanlayıcılar kullanmak için bir `timerResolver` nesnesi oluşturun; bu nesne, özel zamanlayıcıları paywall render edildiğinde onların yerini alacak dize değerleriyle eşleştiren bir sözlük veya haritadır. İşte bir örnek:

<Tabs groupId="current-os" queryString> 
<TabItem value="kotlin" label="Kotlin" default> 

```kotlin showLineNumbers

...

val customTimers = mapOf(
    "CUSTOM_TIMER_NY" to Calendar.getInstance(TimeZone.getDefault()).apply { set(2025, 0, 1) }.time, // New Year 2025
)
val timerResolver = AdaptyUiTimerResolver { timerId ->
    customTimers.getOrElse(timerId, { Date(System.currentTimeMillis() + 3600 * 1000L) /* in 1 hour */ } )
}
```

</TabItem> 
<TabItem value="java" label="Java" default> 

```JAVA showLineNumbers

...

Map<String, Date> customTimers = new HashMap<>();
customTimers.put(
        "CUSTOM_TIMER_NY",
        new Calendar.Builder().setTimeZone(TimeZone.getDefault()).setDate(2025, 0, 1).build().getTime()
);
AdaptyUiTimerResolver timerResolver = new AdaptyUiTimerResolver() {
    @NonNull
    @Override
    public Date timerEndAtDate(@NonNull String timerId) {
        Date date = customTimers.get(timerId);
        return date != null ? date : new Date(System.currentTimeMillis() + 3600 * 1000L); /* in 1 hour */
    }
};
```

</TabItem> 

</Tabs>

Bu örnekte `CUSTOM_TIMER_NY`, Adapty kontrol panelinde ayarladığınız geliştirici tanımlı zamanlayıcının **Timer ID**'sidir. `timerResolver`, uygulamanızın zamanlayıcıyı doğru değerle (örneğin Yılbaşı gibi zamanlayıcının bitiş zamanından mevcut zaman çıkarılarak hesaplanan `13d 09h 03m 34s`) dinamik olarak güncellemesini sağlar.

## Özel etiketleri kullanma \{#use-custom-tags\}

Mobil uygulamanızda özel etiketler kullanmak için bir `tagResolver` nesnesi oluşturun; bu nesne, özel etiketleri paywall render edildiğinde onların yerini alacak dize değerleriyle eşleştiren bir sözlük veya haritadır. İşte bir örnek:

<Tabs groupId="current-os" queryString>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
val customTags = mapOf("USERNAME" to "John")
val tagResolver = AdaptyUiTagResolver { tag -> customTags[tag] }
```

</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Map<String, String> customTags = new HashMap<>();
customTags.put("USERNAME", "John");
AdaptyUiTagResolver tagResolver = customTags::get;
```

</TabItem>
</Tabs>

Bu örnekte `USERNAME`, Adapty kontrol panelinde `<USERNAME/>` olarak girdiğiniz özel bir etikettir. `tagResolver`, uygulamanızın bu özel etiketi belirtilen değerle (örneğin `John`) dinamik olarak değiştirmesini sağlar.

`tagResolver`'ı paywallınızı sunmadan hemen önce oluşturup doldurmayı öneririz. Hazır olduğunda, paywall sunmak için kullandığınız AdaptyUI metoduna geçirin.

## Paywall yükleme göstergesi rengini değiştirme \{#change-paywall-loading-indicator-color\}

Yükleme göstergesinin varsayılan rengini şu şekilde geçersiz kılabilirsiniz:

```XML showLineNumbers title = "XML"

<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
    
    <item name="adapty_progressIndicatorColor">@color/yourColor</item>
</style>
```