---
title: "React Native SDK'da remote config paywallları için paywall ve ürün çekme"
description: "Kullanıcı monetizasyonunu geliştirmek için Adapty React Native SDK'da paywall ve ürün çekin."
---

Remote config ve özel paywallları göstermeden önce bunlara ait bilgileri çekmeniz gerekir. Bu konunun remote config ve özel paywalllarla ilgili olduğunu unutmayın. Paywall Builder ile özelleştirilmiş paywalllar için bilgi çekme konusunda [Paywall Builder paywalllarını ve yapılandırmalarını çekme](react-native-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 ç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 paywall'a ekleyin](create-paywall).

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

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

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

Adapty'de bir [ürün](product), App Store ve Google Play'deki ürünlerin bir kombinasyonudur. Bu çapraz platform ürünler paywallara entegre edilerek belirli mobil uygulama placement'larında gösterilmesini sağlar.

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

:::important
**Ürün ID'lerini doğrudan koda yazmayın.** Doğrudan koda yazmanız 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 yönetmelidir; bugün iki ürün döndüren bir paywall yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini göstermelisiniz.
:::

```typescript showLineNumbers
try {
    const id = 'YOUR_PLACEMENT_ID';
    const locale = 'en';

    const paywall = await adapty.getPaywall(id, locale);
    // the requested paywall
} catch (error) {
    // handle the error
}
```

| Parametre         | Zorunluluk | Açıklama |
|-------------------|--------|-----------|
| **placementId**   | zorunlu | [Placement](placements)'ın tanımlayıcısı. 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-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 dil, ikincisi bölge içindir.</p><p></p><p>Örnek: `en` İngilizce, `pt-br` Brezilya Portekizcesini temsil eder.</p><p></p><p>Yerel kod hakkında daha fazla bilgi için [Yerelleştirmeler ve yerel kodlar](react-native-localizations-and-locale-codes) sayfasına bakın.</p> |
| **fetchPolicy**   | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak sunucudan veri yüklemeye çalışır ve başarısız olursa önbelleğe alınmış veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığı için bu seçeneği öneriyoruz.</p><p></p><p>Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, önbelleğe alınmış veri mevcutsa onu döndürmek için `.returnCacheDataElseLoad` kullanmayı düşünebilirsiniz. Bu senaryoda kullanıcılar en son verilere ulaşamayabilir, ancak internet bağlantısı ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak için oturum sırasında kullanmak güvenlidir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğ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](react-native-use-fallback-paywalls). Paywallları daha hızlı çekmek için CDN ve CDN'e ulaşılamadığında bağımsız bir yedek sunucu da 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ı garantilemek için tasarlanmıştır.</p> |
| **loadTimeoutMs** | varsayılan: 5 sn | <p>Bu değer, metodun zaman aşımını sınırlar. Zaman aşımına ulaşılırsa önbelleğe alınmış veri veya yerel yedek döndürülür.</p><p></p><p>Nadir durumlarda bu metodun `loadTimeout`'ta 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 doğrudan koda yazmayın! Paywalllar uzaktan yapılandırıldığından mevcut ürünler, ürün sayısı ve özel teklifler (ücretsiz deneme gibi) zaman içinde değişebilir. Kodunuzun bu senaryoları yönettiğinden emin olun.  
Örneğin, başlangıçta 2 ürün alıyorsanız uygulamanız o 2 ürünü göstermelidir. Ancak daha sonra 3 ürün alırsanız uygulamanız herhangi bir kod değişikliği gerektirmeden 3 ürünü de göstermelidir. Doğrudan koda yazmanız gereken tek şey placement ID'sidir.

Yanıt parametreleri:

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

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

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

```typescript showLineNumbers
try {
    // ...paywall
    const products = await adapty.getPaywallProducts(paywall);
  // the requested products list
} catch (error) {
    // handle the error
}
```

Yanıt parametreleri:

| Parametre | Açıklama                                                                                                                                                                                |
| :-------- |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Products  | Ürün tanımlayıcısı, ürün adı, fiyat, para birimi, abonelik süresi ve diğer birkaç özelliği içeren [`AdaptyPaywallProduct`](https://react-native.adapty.io/interfaces/adaptypaywallproduct) nesnelerinin listesi.                                   |

Kendi paywall tasarımınızı uygularken [`AdaptyPaywallProduct`](https://react-native.adapty.io/interfaces/adaptypaywallproduct) nesnesindeki bu özelliklere erişmeniz gerekecektir. Aşağıda en sık kullanılan özellikler gösterilmektedir; mevcut tüm özellikler için bağlantılı belgeye başvurun.

| Özellik                | Açıklama                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Title**               | Ürünün başlığını göstermek için `product.localizedTitle` kullanın. Yerelleştirmenin cihazın kendi dil ayarına değil, kullanıcıların seçtiği mağaza ülkesine göre yapıldığını unutmayın.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Price**               | Fiyatın yerelleştirilmiş sürümünü göstermek için `product.price?.localizedString` kullanın. Bu yerelleştirme cihazın dil bilgisine dayanır. Fiyata sayı olarak erişmek için `product.price?.amount` kullanabilirsiniz. Değer yerel para biriminde sunulur. İlişkili para birimi sembolünü almak için `product.price?.currencySymbol` kullanın.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| **Subscription Period** | Dönemi (hafta, ay, yıl vb.) göstermek için `product.subscription?.localizedSubscriptionPeriod` kullanın. Bu yerelleştirme cihazın diline dayanır. Abonelik dönemini programatik olarak almak için `product.subscription?.subscriptionPeriod` kullanın. Buradan uzunluğu almak için `unit` özelliğine erişebilirsiniz (yani 'day', 'week', 'month', 'year' veya 'unknown'). `numberOfUnits` değeri dönem birimlerinin sayısını verir. Örneğin, üç aylık bir abonelik için `unit` özelliğinde `'month'` ve `numberOfUnits` özelliğinde `3` görürsünüz.                                                                                                                                                                                                                                                                                                       |
| **Introductory Offer**  | Bir aboneliğin başlangıç teklifi içerip içermediğini gösteren bir rozet veya diğer göstergeler için `product.subscription?.offer?.phases` özelliğine bakın. Bu, ücretsiz deneme aşaması ve başlangıç fiyatı aşaması olmak üzere en fazla iki indirim aşaması içerebilen bir listedir. Her aşama nesnesinde şu yararlı özellikler bulunur:<br/>• `paymentMode`: `'free_trial'`, `'pay_as_you_go'`, `'pay_up_front'` ve `'unknown'` değerlerine sahip bir dize. Ücretsiz denemeler `'free_trial'` türünde olur.<br/>• `price`: İndirimli fiyat, sayı olarak. Ücretsiz denemeler için burada `0` arayın.<br/>• `localizedNumberOfPeriods`: Teklifin süresini cihazın diline göre yerelleştirilmiş şekilde açıklayan bir dize. Örneğin, üç günlük bir deneme teklifi bu alanda `'3 days'` gösterir.<br/>• `subscriptionPeriod`: Alternatif olarak, teklif döneminin ayrıntılarını bu özellikle alabilirsiniz. Teklifler için bir önceki bölümde açıklananla aynı şekilde çalışır.<br/>• `localizedSubscriptionPeriod`: Kullanıcının diline göre biçimlendirilmiş indirim abonelik dönemi. |

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

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

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

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

`getPaywallForDefaultAudience` metodunun birkaç önemli dezavantajı vardır:

- **Potansiyel geriye dönük uyumluluk sorunları**: Farklı uygulama sürümleri (mevcut ve gelecekteki) için farklı paywalllar göstermeniz gerekiyorsa sorunlarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamak zorunda kalırsınız ya da mevcut (eski) sürüme sahip kullanıcıların render edilmeyen paywalllarla karşılaşabileceğini kabul edersiniz.
- **Hedefleme kaybı**: Tüm kullanıcılar **Tüm Kullanıcılar** kitlesi için tasarlanmış aynı paywall'ı görür; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution'ına veya kendi özel özelliklerinize göre hedefleme dahil) kaybettiğiniz 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-react-native#fetch-paywall-information) açıklanan `getPaywall` metoduna bağlı kalın.
:::

```typescript showLineNumbers
try {
    const id = 'YOUR_PLACEMENT_ID';
    const locale = 'en';

    const paywall = await adapty.getPaywallForDefaultAudience(id, locale);
  // the requested paywall
} catch (error) {
    // handle the error
}
```

:::note
`getPaywallForDefaultAudience` metodu React Native SDK 2.11.2 sürümünden itibaren kullanılabilir.
:::

| Parametre | Zorunluluk | Açıklama |
|---------|--------|-----------|
| **placementId** | zorunlu | [Placement](placements)'ın tanımlayıcısı. 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-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 dil, ikincisi bölge içindir.</p><p></p><p>Örnek: `en` İngilizce, `pt-br` Brezilya Portekizcesini temsil eder.</p><p></p><p>Yerel kod hakkında daha fazla bilgi için [Yerelleştirmeler ve yerel kodlar](react-native-localizations-and-locale-codes) sayfasına bakın.</p> |
| **fetchPolicy** | varsayılan: `.reloadRevalidatingCacheData` | <p>SDK varsayılan olarak sunucudan veri yüklemeye çalışır ve başarısız olursa önbelleğe alınmış veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığı için bu seçeneği öneriyoruz.</p><p></p><p>Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, önbelleğe alınmış veri mevcutsa onu döndürmek için `.returnCacheDataElseLoad` kullanmayı düşünebilirsiniz. Bu senaryoda kullanıcılar en son verilere ulaşamayabilir, ancak internet bağlantısı ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak için oturum sırasında kullanmak güvenlidir.</p><p></p><p>Önbelleğin uygulama yeniden başlatıldığında bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğini unutmayın.</p> |