---
title: "Unity SDK'da Paywall Builder paywalllarını ve yapılandırmalarını getirme"
description: "Unity uygulamanızda abonelik kontrolünü geliştirmek için Adapty'de PB paywalllarını nasıl alacağınızı öğrenin."
---

Adapty Kontrol Paneli'ndeki yeni Paywall Builder ile [paywall'ınızın görsel kısmını tasarladıktan](adapty-paywall-builder) sonra, bunu mobil uygulamanızda gösterebilirsiniz. Bu süreçteki ilk adım, aşağıda açıklandığı gibi placement ile ilişkili paywall'ı ve görünüm yapılandırmasını almaktır.

:::warning
Yeni Paywall Builder, Unity SDK 3.3.0 veya üzeri sürümlerle çalışır.
:::

Bu konunun Paywall Builder ile özelleştirilmiş paywalllar için geçerli olduğunu unutmayın. Paywalllarınızı manuel olarak uyguluyorsanız [Mobil uygulamanızda remote config paywallları için paywallları ve ürünleri getirme](fetch-paywalls-and-products-unity) konusuna bakın.

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

:::

<details>
   <summary>Mobil uygulamanızda paywallları göstermeye başlamadan önce (genişletmek için tıklayın)</summary>

1. Adapty Kontrol Paneli'nde [ürünlerinizi oluşturun](create-product).
2. Adapty Kontrol Paneli'nde [bir paywall oluşturun ve ürünleri ekleyin](create-paywall).
3. Adapty Kontrol Paneli'nde [placement oluşturun ve paywall'ınızı ekleyin](create-placement).
4. Mobil uygulamanıza [Adapty SDK](sdk-installation-unity) yükleyin.
</details>

## Paywall Builder ile tasarlanmış paywall'ı getirme \{#fetch-paywall-designed-with-paywall-builder\}

[Paywall Builder kullanarak bir paywall tasarladıysanız](adapty-paywall-builder), kullanıcıya göstermek için onu mobil uygulama kodunuzda render etmeniz gerekmez. Böyle bir paywall, paywall içinde neyin ve nasıl gösterileceğini içerir. Bununla birlikte, placement aracılığıyla paywall ID'sini, görünüm yapılandırmasını almanız ve ardından mobil uygulamanızda göstermeniz gerekir.

En iyi performansı sağlamak için paywall'ı ve [görünüm yapılandırmasını](unity-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) mümkün olduğunca erken almanız kritik önem taşır; bu sayede görseller kullanıcıya sunulmadan önce indirmeye yeterli zaman kalır.

Paywall almak için `GetPaywall` metodunu kullanın:

```csharp showLineNumbers
Adapty.GetPaywall("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});
```

Parametreler:

| Parametre | Zorunluluk | Açıklama |
|---------|--------|-----------|
| **placementId** | zorunlu | İstenen [Placement](placements) tanımlayıcısı. Bu, Adapty Kontrol Paneli'nde placement oluştururken belirttiğiniz değerdir. |
| **locale** | <p>isteğe bağlı</p><p>varsayılan: `en`</p> | <p>[Paywall yerelleştirmesinin](add-paywall-locale-in-adapty-paywall-builder) tanımlayıcısı. Bu parametrenin, eksi (**-**) karakteriyle ayrılmış bir veya iki alt etiket içeren bir dil kodu olması beklenir. İlk alt etiket dili, ikincisi bölgeyi belirtir.</p><p></p><p>Örnek: `en` İngilizce anlamına gelir, `pt-br` Brezilya Portekizcesini temsil eder.</p><p>Yerel kod ve kullanım önerileri hakkında daha fazla bilgi için [Yerelleştirmeler ve yerel kodlar](localizations-and-locale-codes) sayfasına bakın.</p> |
| **fetchPolicy** | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel veriyi almasını sağladığından bu seçeneği öneririz.</p><p></p><p>Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız, önbellekte veri varsa onu döndürmek için `.returnCacheDataElseLoad` kullanmayı düşünebilirsiniz. Bu senaryoda kullanıcılar en güncel veriyi alamayabilir, ancak internet bağlantısı ne kadar kötü olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak amacıyla oturum sırasında kullanmak güvenlidir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında silindiğini unutmayın.</p><p></p><p>Adapty SDK, paywallları yerel olarak iki katmanda depolar: yukarıda açıklanan düzenli güncellenen önbellek ve [yedek paywalllar](fallback-paywalls). Paywallları daha hızlı getirmek için CDN, CDN'ye ulaşılamadığında ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının yetersiz olduğu durumlarda bile her zaman en güncel paywall sürümünü alıp güvenilirliği sağlamak için tasarlanmıştır.</p> |
| **loadTimeout** | varsayılan: 5 sn | <p>Bu değer, metodun zaman aşımını sınırlar. Zaman aşımına ulaşılırsa önbellekteki veri veya yerel yedek döndürülür.</p><p>Nadir durumlarda bu metodun `loadTimeout` içinde belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; işlem arka planda farklı isteklerden oluşabilir.</p> |

Yanıt parametreleri:

| Parametre | Açıklama |
| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Paywall   | Ürün ID'leri listesi, paywall tanımlayıcısı, remote config ve diğer birçok özelliği içeren bir [`AdaptyPaywall`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) nesnesi. |

## Paywall Builder ile tasarlanmış paywall'ın görünüm yapılandırmasını getirme \{#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder\}

:::important
Paywall builder'daki **Show on device** geçişinin etkin olduğundan emin olun. Bu seçenek açık değilse görünüm yapılandırması alınamaz.
:::

Paywall'ı aldıktan sonra, `ViewConfiguration` içerip içermediğini kontrol edin; bu, paywall'ın Paywall Builder kullanılarak oluşturulduğunu gösterir ve paywall'ı nasıl göstereceğinize yol gösterir. `ViewConfiguration` mevcutsa Paywall Builder paywall'ı olarak işleyin; değilse [remote config paywall olarak ele alın](present-remote-config-paywalls-unity).

Unity SDK'da, görünüm yapılandırmasını manuel olarak almadan doğrudan `CreatePaywallView` metodunu çağırın.

:::warning
`CreatePaywallView` metodunun sonucu yalnızca bir kez kullanılabilir. Tekrar kullanmanız gerekiyorsa `CreatePaywallView` metodunu yeniden çağırın. Yeniden oluşturmadan iki kez çağırmak `AdaptyUIError.viewAlreadyPresented` hatasına yol açabilir.
:::

```csharp showLineNumbers
var parameters = new AdaptyUICreatePaywallViewParameters()
  .SetPreloadProducts(preloadProducts)
  .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
  // handle the result
});
```

Parametreler:

| Parametre           | Zorunluluk     | Açıklama                                                  |
| :------------------ | :------------- | :----------------------------------------------------------- |
| **paywall**         | zorunlu        | İstenen paywall için bir controller elde etmek amacıyla kullanılan `AdaptyPaywall` nesnesi. |
| **loadTimeout**     | varsayılan: 5 sn | Bu değer, metodun zaman aşımını sınırlar. Zaman aşımına ulaşılırsa önbellekteki veri veya yerel yedek döndürülür. Nadir durumlarda bu metodun `loadTimeout` içinde belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; işlem arka planda farklı isteklerden oluşabilir. |
| **PreloadProducts** | isteğe bağlı   | Ekrandaki ürünlerin gösterim zamanlamasını optimize etmek için bir `AdaptyPaywallProducts` dizisi sağlayın. `nil` geçilirse AdaptyUI gerekli ürünleri otomatik olarak getirir. |
| **CustomTags**      | isteğe bağlı   | Özel etiketlerin ve çözümlenmiş değerlerinin bir sözlüğünü tanımlayın. Özel etiketler paywall içeriğinde yer tutucu olarak işlev görür ve paywall içinde kişiselleştirilmiş içerik için belirli dizelerle dinamik olarak değiştirilir. Daha fazla bilgi için [Paywall builder'da özel etiketler](custom-tags-in-paywall-builder) konusuna bakın. |
| **CustomTimers**    | isteğe bağlı   | Özel zamanlayıcıların ve bitiş tarihlerinin bir sözlüğünü tanımlayın. Özel zamanlayıcılar, paywall'ınızda geri sayım sayaçları göstermenizi sağlar. |

:::note
Birden fazla dil kullanıyorsanız [Paywall Builder yerelleştirmesinin](add-paywall-locale-in-adapty-paywall-builder) nasıl ekleneceğini ve yerel kodların nasıl doğru kullanılacağını [buradan](localizations-and-locale-codes) öğrenin.
:::

Görünümü aldıktan sonra [paywall'ı gösterin](unity-present-paywalls).

## Varlıkları özelleştirme \{#customize-assets\}

Paywall'ınızdaki görsel ve videoları özelleştirmek için özel varlıklar uygulayın.

Kahraman görselleri ve videolarının önceden tanımlanmış ID'leri vardır: `hero_image` ve `hero_video`. Özel varlık paketinde, bu öğeleri ID'leriyle hedefler ve davranışlarını özelleştirirsiniz.

Diğer görseller ve videolar için Adapty kontrol panelinde [özel bir ID belirlemeniz](custom-media) gerekir.

Örneğin şunları yapabilirsiniz:

- Bazı kullanıcılara farklı bir görsel veya video gösterin.
- Uzak ana görsel yüklenirken yerel bir önizleme görseli gösterin.
- Video başlamadan önce bir önizleme görseli gösterin.

:::important
Bu özelliği kullanmak için Adapty Unity SDK'yı 3.8.0 veya üzeri bir sürüme güncelleyin.
:::

Özel varlıkları basit bir sözlük aracılığıyla nasıl sağlayabileceğinize ilişkin bir örnek:

```csharp showLineNumbers
var customAssets = new Dictionary<string, AdaptyCustomAsset>
{
    { "custom_image", AdaptyCustomAsset.LocalImageFile("custom_assets/images/custom_image.png") },
    { "hero_video", AdaptyCustomAsset.LocalVideoFile("custom_assets/videos/custom_video.mp4") }
};

var parameters = new AdaptyUICreatePaywallViewParameters()
    .SetCustomAssets(customAssets)
    .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
    // handle the result
});
```

:::note
Bir varlık bulunamazsa paywall varsayılan görünümüne geri döner.
:::

## Geliştirici tanımlı zamanlayıcıları ayarlama \{#set-up-developer-defined-timers\}

Unity uygulamanızda özel zamanlayıcılar kullanmak için, zamanlayıcı ID'leri ve bitiş tarihlerinin sözlüğünü doğrudan `SetCustomTimers` metoduna geçebilirsiniz. İşte bir örnek:

```csharp showLineNumbers
var customTimers = new Dictionary<string, DateTime> {
    { "CUSTOM_TIMER_6H", DateTime.Now.AddHours(6) },
    { "CUSTOM_TIMER_NY", new DateTime(2025, 1, 1) }
};

var parameters = new AdaptyUICreatePaywallViewParameters()
    .SetCustomTimers(customTimers)
    .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
    // handle the result
});
```

Bu örnekte `CUSTOM_TIMER_NY` ve `CUSTOM_TIMER_6H`, Adapty Kontrol Paneli'nde ayarladığınız geliştirici tanımlı zamanlayıcıların **Timer ID**'leridir. Zamanlayıcı çözümleyici, uygulamanızın her zamanlayıcıyı doğru değerle dinamik olarak güncellemesini sağlar. Örneğin:

- `CUSTOM_TIMER_NY`: Yeni Yıl gibi zamanlayıcının bitiş tarihine kalan süre.
- `CUSTOM_TIMER_6H`: Kullanıcının paywall'ı açtığı andan itibaren başlayan 6 saatlik sürede kalan zaman.

## Varsayılan kitle paywall'ıyla paywall getirme hızını artırma \{#speed-up-paywall-fetching-with-default-audience-paywall\}

Genellikle paywalllar neredeyse anında getirilir, bu nedenle bu süreci hızlandırma konusunda endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve paywalla sahipseniz ve kullanıcılarınızın zayıf bir internet bağlantısı varsa, paywall getirme işlemi beklenenden uzun sürebilir. Bu durumda, hiç paywall göstermemek yerine sorunsuz bir kullanıcı deneyimi sağlamak için varsayılan bir paywall göstermek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement'ın **All Users** kitlesine ait paywall'ı getiren `GetPaywallForDefaultAudience` metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki [Paywall'ı Getirme](#fetch-paywall) bölümünde ayrıntılı olarak açıklanan `getPaywall` metoduyla paywall getirmek olduğunu anlamak kritik önem taşır.

:::warning
`GetPaywallForDefaultAudience` yerine `GetPaywall` kullanmayı değerlendirin; zira `GetPaywallForDefaultAudience`'ın önemli sınırlamaları vardır:

- **Uyumluluk sorunları**: Birden fazla uygulama sürümünü desteklerken sorun yaratabilir; geriye dönük uyumlu tasarımlar oluşturmanızı ya da eski sürümlerin yanlış görüntülenebileceğini kabul etmenizi gerektirir.
- **Kişiselleştirme yok**: Yalnızca "All Users" kitlesine yönelik içerik gösterir; ülke, attribution veya özel özelliklere dayalı hedefleme yapılamaz.

Kullanım durumunuzda daha hızlı getirme bu dezavantajlardan daha önemliyse, aşağıda gösterildiği gibi `GetPaywallForDefaultAudience` kullanın. Aksi takdirde [yukarıda](#fetch-paywall) açıklanan `GetPaywall`'ı kullanın.
:::

```csharp showLineNumbers
Adapty.GetPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});
```

Parametreler:

| Parametre | Zorunluluk | Açıklama |
|---------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **placementId** | zorunlu | İstenen [Placement](placements) tanımlayıcısı. Bu, Adapty Kontrol Paneli'nde placement oluştururken belirttiğiniz değerdir. |
| **locale** | <p>isteğe bağlı</p><p>varsayılan: `en`</p> | <p>Paywall yerelleştirmesinin tanımlayıcısı. Bu parametrenin, eksi (**-**) karakteriyle ayrılmış bir veya iki alt etiket içeren bir dil kodu olması beklenir. İlk alt etiket dili, ikincisi bölgeyi belirtir.</p><p></p><p>Örnek: `en` İngilizce anlamına gelir, `pt-br` Brezilya Portekizcesini temsil eder.</p> |
| **fetchPolicy** | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel veriyi almasını sağladığından bu seçeneği öneririz.</p><p></p><p>Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız, önbellekte veri varsa onu döndürmek için `.returnCacheDataElseLoad` kullanmayı düşünebilirsiniz. Bu senaryoda kullanıcılar en güncel veriyi alamayabilir, ancak internet bağlantısı ne kadar kötü olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak amacıyla oturum sırasında kullanmak güvenlidir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında silindiğini unutmayın.</p><p></p><p>Adapty SDK, paywallları yerel olarak iki katmanda depolar: yukarıda açıklanan düzenli güncellenen önbellek ve yedek paywalllar. Paywallları daha hızlı getirmek için CDN, CDN'ye ulaşılamadığında ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının yetersiz olduğu durumlarda bile her zaman en güncel paywall sürümünü alıp güvenilirliği sağlamak için tasarlanmıştır.</p> |