---
title: "Flutter SDK'da remote config paywallları için paywall ve ürün verilerini çekme"
description: "Kullanıcı monetizasyonunu artırmak için Adapty Flutter SDK'da paywall ve ürünleri çekin."
---

Remote config ve özel paywallları göstermeden önce bunlara ait bilgileri çekmeniz gerekir. Bu konu, remote config ve özel paywalllarla ilgilidir. Paywall Builder ile özelleştirilmiş paywallların verilerini çekme hakkında bilgi almak için [Paywall Builder paywalllarını ve yapılandırmalarını çekme](flutter-get-pb-paywalls) sayfasına 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 paywall ve ürün verilerini çekmeye 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 bu paywalla ekleyin](create-paywall).

3. Adapty Kontrol Paneli'nde [placement'lar oluşturun ve paywallınızı placement'a ekleyin](create-placement).

4. Mobil uygulamanıza [Adapty SDK'yı yükleyin](sdk-installation-flutter).
</details>

## Paywall bilgilerini çekme \{#fetch-paywall-information\}

Adapty'de bir [ürün](product), App Store ve Google Play'deki ürünlerin bir kombinasyonudur. Bu platformlar arası ürünler, belirli mobil uygulama placement'larında gösterilebilmesi için paywalllarla entegre edilir.

Ürünleri görüntülemek için `getPaywall` metoduyla [placement](placements)'larınızdan birinden bir [Paywall](paywalls) almanız gerekir.

:::important
**Ürün ID'lerini koda gömmayın.** Koda gömmeniz gereken tek ID, placement ID'sidir. Paywalllar uzaktan yapılandırıldığından, ürün sayısı ve mevcut teklifler her an değişebilir. Uygulamanız bu değişiklikleri dinamik olarak ele almalıdır; bugün bir paywall iki ürün döndürüyorsa ve yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini göstermeniz gerekir.
:::

```dart showLineNumbers
try {
  final paywall = await Adapty().getPaywall(id: "YOUR_PLACEMENT_ID", locale: "en");
  // istenen paywall
} on AdaptyError catch (adaptyError) {
  // hatayı ele alın
} catch (e) {
}
```

| Parametre | Zorunluluk | Açıklama |
|---------|--------|-----------|
| **placementId** | zorunlu | [Placement](placements)'ın tanımlayıcısı. Adapty Kontrol Paneli'nde bir placement oluştururken belirttiğiniz değerdir. |
| **locale** | <p>isteğe bağlı</p><p>varsayılan: `en`</p> | <p>[Paywall yerelleştirmesinin](add-remote-config-locale) tanımlayıcısı. Bu parametre, eksi (**-**) karakteriyle ayrılmış bir veya daha fazla alt etiket içeren bir dil kodu olmalıdır. İlk alt etiket dili, ikincisi ise bölgeyi belirtir.</p><p></p><p>Örnek: `en` İngilizce, `pt-br` Brezilya Portekizcesi anlamına gelir.</p><p></p><p>Yerel ayar kodları ve önerilen kullanım şekli hakkında daha fazla bilgi için [Yerelleştirmeler ve yerel ayar kodları](flutter-localizations-and-locale-codes) sayfasına bakın.</p> |
| **fetchPolicy** | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak verileri sunucudan yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Bu yaklaşımı öneriyoruz çünkü kullanıcılarınızın her zaman en güncel verilere erişmesini sağlar.</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` seçeneğini kullanmayı değerlendirin. Bu durumda kullanıcılar en güncel verilere ulaşamayabilir, 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 yüzden ağ isteklerini azaltmak amacıyla oturum sırasında güvenle kullanılabilir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama kaldırıldığında veya manuel olarak temizlendiğinde silindiğini unutmayın.</p><p></p><p>Adapty SDK, paywallları iki katmanda saklar: yukarıda açıklanan düzenli güncellenen önbellek ve [yedek paywalllar](flutter-use-fallback-paywalls). Ayrıca paywallları daha hızlı getirmek için CDN, CDN'e ulaşılamadığı durumlarda ise bağımsız bir yedek sunucu kullanıyoruz. Bu sistem, internet bağlantısının yetersiz olduğu durumlarda bile güvenilirliği sağlarken her zaman en güncel paywall sürümünü almanızı garanti edecek şekilde tasarlanmıştır.</p> |
| **loadTimeout** | varsayılan: 5 sn | <p>Bu değer, metodun zaman aşımı süresini sınırlar. Zaman aşımına ulaşılırsa önbellekteki veri veya yerel yedek döndürülür.</p><p></p><p>Nadir durumlarda bu metodun, `loadTimeout` içinde belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; çünkü işlem arka planda farklı isteklerden oluşabilir.</p> |

Ürün ID'lerini koda gömmeyIn! Paywalllar uzaktan yapılandırıldığından, mevcut ürünler, ürün sayısı ve özel teklifler (ücretsiz denemeler gibi) zaman içinde değişebilir. Kodunuzun bu senaryoları ele aldığından emin olun.  
Örneğin, başlangıçta 2 ürün alıyorsanız uygulamanız bu 2 ürünü göstermelidir. Ancak daha sonra 3 ürün alırsanız, kod değişikliği gerektirmeden uygulamanız 3 ürünü de göstermelidir. Koda gömmeniz gereken tek şey placement ID'sidir.

Yanıt parametreleri:

| Parametre | Açıklama |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Paywall   | Ürün ID'lerinin listesini, paywall tanımlayıcısını, remote config'i ve diğer çeşitli özellikleri içeren bir [`AdaptyPaywall`](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html) nesnesi. |

## Ürünleri çekme \{#fetch-products\}

Paywallı aldıktan sonra, ona karşılık gelen ürün dizisini sorgulayabilirsiniz:

```dart showLineNumbers
try {
  final products = await Adapty().getPaywallProducts(paywall: paywall);
  // istenen ürünler dizisi
} on AdaptyError catch (adaptyError) {
  // hatayı ele alın
} catch (e) {
}
```

Yanıt parametreleri:

| Parametre | Açıklama |
| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Products  | Ürün tanımlayıcısını, ürün adını, fiyatı, para birimini, abonelik süresini ve diğer çeşitli özellikleri içeren [`AdaptyPaywallProduct`](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywallProduct-class.html) nesnelerinin listesi. |

Kendi paywall tasarımınızı uygularken [`AdaptyPaywallProduct`](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywallProduct-class.html) nesnesindeki bu özelliklere ihtiyaç duyacaksınız. Aşağıda en sık kullanılan özellikler gösterilmektedir; tüm mevcut özellikler için bağlantılı belgeye başvurun.

| Özellik | Açıklama |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Başlık** | Ürünün başlığını görüntülemek için `product.localizedTitle` kullanın. Yerelleştirmenin, cihazın yerel ayarına değil, kullanıcının seçtiği mağaza ülkesine göre yapıldığını unutmayın. |
| **Fiyat** | Fiyatın yerelleştirilmiş halini görüntülemek için `product.price.localizedString` kullanın. Bu yerelleştirme, cihazın yerel ayar bilgisine göre yapılır. Fiyata sayısal olarak erişmek için `product.price.amount` kullanabilirsiniz. Değer yerel para biriminde sağlanır. İlgili para birimi sembolünü almak için `product.price.currencySymbol` kullanın. |
| **Abonelik Dönemi** | Dönemi (örn. hafta, ay, yıl vb.) görüntülemek için `product.subscription?.localizedPeriod` kullanın. Bu yerelleştirme, cihazın yerel ayarına göre yapılır. Abonelik dönemine programatik olarak erişmek için `product.subscription?.period` kullanın. Buradan `unit` enum'una erişerek uzunluğu (gün, hafta, ay, yıl veya bilinmeyen) alabilirsiniz. `numberOfUnits` değeri ise dönem birimi sayısını verir. Örneğin, üç aylık bir abonelik için unit özelliğinde `AdaptyPeriodUnit.month`, numberOfUnits özelliğinde ise `3` görürsünüz. |
| **Başlangıç Teklifi** | Aboneliğin başlangıç teklifi içerdiğini gösteren bir rozet veya başka bir gösterge eklemek için `product.subscription?.offer?.phases` özelliğine bakın. Bu liste, ücretsiz deneme aşaması ve başlangıç fiyatı aşaması olmak üzere iki adede kadar indirim aşaması içerebilir. Her aşama nesnesi şu yararlı özellikleri içerir:<br/>• `paymentMode`: `AdaptyPaymentMode.freeTrial`, `AdaptyPaymentMode.payAsYouGo`, `AdaptyPaymentMode.payUpFront` ve `AdaptyPaymentMode.unknown` değerlerine sahip bir enum. Ücretsiz denemeler `AdaptyPaymentMode.freeTrial` türünde olur.<br/>• `price`: İndirimli fiyatın sayısal değeri. Ücretsiz denemeler için burada `0` değerini arayın.<br/>• `localizedNumberOfPeriods`: Teklifin süresini cihazın yerel ayarına göre yerelleştirilmiş olarak açıklayan bir dize. Örneğin, üç günlük bir deneme teklifi bu alanda `3 days` olarak gösterilir.<br/>• `subscriptionPeriod`: Alternatif olarak, bu özellikle teklif döneminin ayrıntılarını tek tek alabilirsiniz. Teklifler için önceki bölümde açıklanan şekilde çalışır.<br/>• `localizedSubscriptionPeriod`: Kullanıcının yerel ayarına göre biçimlendirilmiş indirim abonelik dönemi. |

## Varsayılan kitle paywallıyla veri çekmeyi hızlandırma \{#speed-up-paywall-fetching-with-default-audience-paywall\}

Genellikle paywalllar neredeyse anında çekilir, bu nedenle bu işlemi hızlandırma konusunda endişelenmenize gerek yoktur. Ancak çok sayıda kitleniz ve paywallınız varsa ve kullanıcılarınızın internet bağlantısı zayıfsa, paywall çekme işlemi istediğinizden daha uzun sürebilir. Bu durumlarda, hiç paywall göstermemek yerine kullanıcı deneyimini sorunsuz kılmak için varsayılan bir paywall görüntülemek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement'ın **Tüm Kullanıcılar** kitlesine ait paywallını getiren `getPaywallForDefaultAudience` metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki [Paywall Bilgilerini Çekme](fetch-paywalls-and-products-flutter#fetch-paywall-information) bölümünde açıklandığı gibi `getPaywall` metoduyla paywallı çekmek olduğunu göz önünde bulundurun.

:::warning
Neden `getPaywall` kullanmanızı öneriyoruz?

`getPaywallForDefaultAudience` metodunun bazı önemli dezavantajları vardır:

- **Olası geriye dönük uyumluluk sorunları**: Farklı uygulama sürümleri (mevcut ve gelecekteki) için farklı paywalllar göstermeniz gerekiyorsa zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamanız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla sorun yaşamasını kabul etmeniz gerekecektir.
- **Hedefleme kaybı**: Tüm kullanıcılar, **Tüm Kullanıcılar** kitlesi için tasarlanmış aynı paywallı görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, marketing attribution'a veya kendi özel niteliklerinize dayalı hedefleme dahil) kaybetmeniz anlamına gelir.

Daha hızlı paywall çekme avantajından yararlanmak için bu dezavantajları kabul etmeye hazırsanız, aşağıdaki gibi `getPaywallForDefaultAudience` metodunu kullanın. Aksi takdirde, [yukarıda](fetch-paywalls-and-products-flutter#fetch-paywall-information) açıklanan `getPaywall` metodunu kullanmaya devam edin.
:::

:::note
`getPaywallForDefaultAudience` metodu henüz Flutter SDK'da desteklenmemektedir, ancak destek yakında eklenecektir.
:::

| Parametre | Zorunluluk | Açıklama |
|---------|--------|-----------|
| **placementId** | zorunlu | [Placement](placements)'ın tanımlayıcısı. Adapty Kontrol Paneli'nde bir placement oluştururken belirttiğiniz değerdir. |
| **locale** | <p>isteğe bağlı</p><p>varsayılan: `en`</p> | <p>[Paywall yerelleştirmesinin](add-remote-config-locale) tanımlayıcısı. Bu parametre, eksi (**-**) karakteriyle ayrılmış bir veya daha fazla alt etiket içeren bir dil kodu olmalıdır. İlk alt etiket dili, ikincisi ise bölgeyi belirtir.</p><p></p><p>Örnek: `en` İngilizce, `pt-br` Brezilya Portekizcesi anlamına gelir.</p><p></p><p>Yerel ayar kodları ve önerilen kullanım şekli hakkında daha fazla bilgi için [Yerelleştirmeler ve yerel ayar kodları](flutter-localizations-and-locale-codes) sayfasına bakın.</p> |
| **fetchPolicy** | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak verileri sunucudan yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Bu yaklaşımı öneriyoruz çünkü kullanıcılarınızın her zaman en güncel verilere erişmesini sağlar.</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` seçeneğini kullanmayı değerlendirin. Bu durumda kullanıcılar en güncel verilere ulaşamayabilir, 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 yüzden ağ isteklerini azaltmak amacıyla oturum sırasında güvenle kullanılabilir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama kaldırıldığında veya manuel olarak temizlendiğinde silindiğini unutmayın.</p> |