---
title: "Adapty SDK'yı pure React Native projesine yükleyin ve yapılandırın"
description: "React Native'de abonelik tabanlı uygulamalar için Adapty SDK kurulumuna dair adım adım rehber."
---

:::important
Bu rehber yalnızca **pure React Native (Expo olmayan) projelere** uygulanır.  
**Expo** kullanıyorsanız bunun yerine [Expo kurulum rehberini](sdk-installation-react-native-expo) takip edin.
:::

Adapty SDK, React Native uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:

- **Core Adapty**: Adapty'nin uygulamanızda düzgün çalışması için bu modül zorunludur.
- **AdaptyUI**: Çapraz platform paywall'lar oluşturmak için kullanıcı dostu, kodsuz bir araç olan [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanıyorsanız bu modül gereklidir. AdaptyUI, core modülle birlikte otomatik olarak etkinleştirilir.

:::tip
Adapty SDK'nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek dünya örneği görmek ister misiniz? Paywall görüntüleme, satın alma yapma ve diğer temel işlevler dahil tam kurulumu gösteren [örnek uygulamalarımıza](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples) göz atın.
:::

## Gereksinimler \{#requirements\}

Adapty React Native SDK, iOS 13.0+ sürümünü destekler; ancak [Adapty paywall builder](adapty-paywall-builder) ile oluşturulan paywall'ları kullanmak için iOS 15.0+ gereklidir.

:::info
Adapty, Google Play Billing Library 8.x sürümüne kadar uyumludur. Adapty varsayılan olarak Google Play Billing Library v.7.0.0 ile çalışır; ancak daha yeni bir sürümü zorlamak istiyorsanız [bağımlılığı manuel olarak ekleyebilirsiniz](https://developer.android.com/google/play/billing/integrate#dependency).
:::

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="info">
SDK'yı yüklemek, Adapty kurulumunun 5. adımıdır. Uygulamanızda satın almalar çalışmadan önce uygulamanızı mağazalara bağlamanız, ardından Adapty Kontrol Paneli'nde ürünler, bir paywall ve bir placement oluşturmanız gerekir. [Hızlı başlangıç kılavuzu](quickstart) tüm gerekli adımları anlatmaktadır.
</Callout>

## Adapty SDK'yı yükleyin \{#install-adapty-sdk\}

[![Release](https://img.shields.io/github/v/release/adaptyteam/AdaptySDK-React-Native.svg?style=flat&logo=react)](https://github.com/adaptyteam/AdaptySDK-React-Native/releases)

1. Adapty SDK'yı yükleyin (`@adapty/core` otomatik olarak da yüklenir):
   ```sh showLineNumbers title="Shell"
   # npm kullanarak
   npm install react-native-adapty
   
   # veya yarn kullanarak
   yarn add react-native-adapty  
   ```
2. iOS için pod'ları yükleyin:
   ```sh showLineNumbers title="Shell"
   cd ios && pod install
   ```

<details>
   <summary>Android için React Native sürümünüz 0.73.0'dan eskiyse (genişletmek için tıklayın)</summary>

`/android/build.gradle` dosyasını güncelleyin. `kotlin-gradle-plugin:1.8.0` bağımlılığının veya daha yeni bir sürümünün mevcut olduğundan emin olun:

   ```groovy showLineNumbers title="/android/build.gradle"
   ...
   buildscript {
     ...
     dependencies {
       ...
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
     }
   }
   ...
   ```

</details>

## Adapty SDK'nın Adapty modülünü etkinleştirin \{#activate-adapty-module-of-adapty-sdk\}

**Public SDK Key**'inizi almak için:

1. Adapty Kontrol Paneli'ne gidin ve [**App settings → General**](https://app.adapty.io/settings/general) sayfasına geçin.
2. **Api keys** bölümünden **Public SDK Key**'i kopyalayın (Secret Key'i değil).
3. Koddaki `"YOUR_PUBLIC_SDK_KEY"` ifadesini bununla değiştirin.

:::important

- Adapty'yi başlatırken **Public SDK key** kullandığınızdan emin olun; **Secret key** yalnızca [sunucu tarafı API](getting-started-with-server-side-api) için kullanılmalıdır.
- **SDK key**'leri her uygulama için benzersizdir; birden fazla uygulamanız varsa doğru olanı seçtiğinizden emin olun.
:::

Adapty'yi etkinleştirmek için aşağıdaki kodu `App.tsx` dosyasına kopyalayın:

```typescript showLineNumbers title="App.tsx"

adapty.activate('YOUR_PUBLIC_SDK_KEY');
```

:::tip
Geliştirme ortamındaki etkinleştirme hatalarını önlemek için [ipuçlarına](#development-environment-tips) göz atın.
:::

Şimdi uygulamanızda paywall'ları ayarlayın:

- [Adapty Paywall Builder](adapty-paywall-builder) kullanıyorsanız [Paywall Builder hızlı başlangıç rehberini](react-native-quickstart-paywalls) takip edin.
- Kendi paywall arayüzünüzü oluşturuyorsanız [özel paywall'lar için hızlı başlangıç rehberine](react-native-quickstart-manual) bakın.

## Adapty SDK'nın AdaptyUI modülünü etkinleştirin \{#activate-adaptyui-module-of-adapty-sdk\}

[Paywall Builder](adapty-paywall-builder) kullanmayı planlıyorsanız AdaptyUI modülüne ihtiyacınız var. Core modülü etkinleştirdiğinizde otomatik olarak etkinleştirilir; başka bir şey yapmanıza gerek yoktur.

## İsteğe bağlı kurulum \{#optional-setup\}

### Loglama \{#logging\}

#### Loglama sistemini ayarlayın \{#set-up-the-logging-system\}

Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri loglar. Kullanılabilir log seviyeleri şunlardır:

| Seviye     | Açıklama                                                                                                                                           |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `error`    | Yalnızca hatalar loglanır                                                                                                                          |
| `warn`     | Hatalar ve kritik hatalara yol açmayan ancak dikkat edilmesi gereken SDK mesajları loglanır                                                        |
| `info`     | Hatalar, uyarılar ve çeşitli bilgi mesajları loglanır                                                                                              |
| `verbose`  | Fonksiyon çağrıları, API sorguları gibi hata ayıklama sırasında yararlı olabilecek ek bilgiler loglanır                                            |

Log seviyesini, Adapty yapılandırmasından önce veya sırasında ayarlayabilirsiniz:

```typescript showLineNumbers title="App.tsx"
// Etkinleştirmeden önce log seviyesini ayarlayın
// Geliştirme ve ilk production sürümü için 'verbose' önerilir
adapty.setLogLevel('verbose');

// Veya yapılandırma sırasında ayarlayın
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  logLevel: 'verbose',
});
```

### Veri politikaları \{#data-policies\}

Adapty, siz açıkça göndermediğiniz sürece kullanıcılarınızın kişisel verilerini saklamaz; ancak mağaza veya ülke yönergelerine uymak için ek veri güvenlik politikaları uygulayabilirsiniz.

#### IP adresi toplama ve paylaşımını devre dışı bırakın \{#disable-ip-address-collection-and-sharing\}

Adapty modülünü etkinleştirirken kullanıcı IP adresi toplama ve paylaşımını devre dışı bırakmak için `ipAddressCollectionDisabled` değerini `true` olarak ayarlayın. Varsayılan değer `false`'tur.

Bu parametreyi; kullanıcı gizliliğini artırmak, bölgesel veri koruma düzenlemelerine (GDPR veya CCPA gibi) uymak ya da uygulamanız için IP tabanlı özellikler gerekmiyorsa gereksiz veri toplamayı azaltmak amacıyla kullanın.

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});
```

#### Reklam kimliği toplama ve paylaşımını devre dışı bırakın \{#disable-advertising-id-collection-and-sharing\}

Adapty modülünü etkinleştirirken reklam tanımlayıcılarının toplanmasını devre dışı bırakmak için `ios.idfaCollectionDisabled` (iOS) veya `android.adIdCollectionDisabled` (Android) değerini `true` olarak ayarlayın. Varsayılan değer `false`'tur.

Bu parametreyi; App Store/Play Store politikalarına uymak, Uygulama İzleme Şeffaflığı istemini tetiklemekten kaçınmak ya da uygulamanız reklam kimliklerine dayalı attribution veya analitik gerektirmiyorsa kullanın.

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,      
  },
  android: {
    adIdCollectionDisabled: true,      
  },
});
```

#### AdaptyUI için medya önbellek yapılandırmasını ayarlayın \{#set-up-media-cache-configuration-for-adaptyui\}

AdaptyUI varsayılan olarak performansı artırmak ve ağ kullanımını azaltmak için medyayı (görsel ve video gibi) önbelleğe alır. Özel bir yapılandırma sağlayarak önbellek ayarlarını özelleştirebilirsiniz.

Varsayılan önbellek ayarlarını geçersiz kılmak için `mediaCache` kullanın:

```typescript
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  mediaCache: {
    memoryStorageTotalCostLimit: 200 * 1024 * 1024, // İsteğe bağlı: bellekteki önbellek boyutu (bayt)
    memoryStorageCountLimit: 2147483647,            // İsteğe bağlı: bellekteki maksimum öğe sayısı
    diskStorageSizeLimit: 200 * 1024 * 1024,       // İsteğe bağlı: diskteki önbellek boyutu (bayt)
  },
});
```

Parametreler:
| Parametre | Zorunlu | Açıklama |
|-----------|---------|----------|
| memoryStorageTotalCostLimit | isteğe bağlı | Bellekteki toplam önbellek boyutu (bayt). Platforma özgü varsayılan değere sahiptir. |
| memoryStorageCountLimit | isteğe bağlı | Bellek depolama alanındaki öğe sayısı sınırı. Platforma özgü varsayılan değere sahiptir. |
| diskStorageSizeLimit | isteğe bağlı | Diskteki dosya boyutu sınırı (bayt). Platforma özgü varsayılan değere sahiptir. |

### Yerel access level'ları etkinleştirin (Android) \{#enable-local-access-levels-android\}

Varsayılan olarak [yerel access level'lar](local-access-levels) iOS'ta etkin, Android'de devre dışıdır. Android'de de etkinleştirmek için `localAccessLevelAllowed` değerini `true` olarak ayarlayın:

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,      
  },
});
```

### Yedekleme geri yüklemede verileri temizleyin \{#clear-data-on-backup-restore\}

`clearDataOnBackup` değeri `true` olarak ayarlandığında SDK, uygulamanın iCloud yedeğinden geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywall'lar dahil tüm yerel SDK verilerini siler. SDK ardından temiz bir durumla başlatılır. Varsayılan değer `false`'tur.

:::note
Yalnızca yerel SDK önbelleği silinir. Apple ile olan işlem geçmişi ve Adapty sunucularındaki kullanıcı verileri değişmeden kalır.
:::

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
      clearDataOnBackup: true
   },
});
```

## Geliştirme ortamı ipuçları \{#development-environment-tips\}

#### Geliştirme amaçlı SDK etkinleştirmesini geciktirin \{#delay-sdk-activation-for-development-purposes\}

Adapty, SDK etkinleştirmesinde tüm gerekli kullanıcı verilerini önceden alarak güncel verilere daha hızlı erişim sağlar.

Ancak bu durum, geliştirme sırasında sıklıkla kimlik doğrulama isteyen iOS simülatöründe sorun yaratabilir. Adapty, StoreKit kimlik doğrulama akışını kontrol edemese de güncel kullanıcı verisi almak için yapılan SDK isteklerini erteleyebilir.

`__debugDeferActivation` özelliği etkinleştirildiğinde, activate çağrısı bir sonraki Adapty SDK çağrısını yapana kadar bekletilir. Bu, kimlik doğrulama verisi gerekmiyorsa gereksiz kimlik doğrulama istemlerini önler.

**Bu özelliğin yalnızca geliştirme amaçlı kullanıldığını** belirtmek önemlidir; çünkü tüm olası kullanıcı senaryolarını kapsamaz. Production ortamında etkinleştirme geciktirilmemelidir; gerçek cihazlar kimlik doğrulama verilerini genellikle hatırlar ve tekrar tekrar kimlik bilgisi istemez.

Önerilen kullanım yaklaşımı şöyledir:

```typescript showLineNumbers title="Typescript"
try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // herhangi bir 3. taraf kütüphaneden 'isSimulator'
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Uygulamanız için hatayı uygun şekilde yönetin
}
```

#### React Native'in Fast Refresh özelliğinde SDK etkinleştirme hatalarını giderin \{#troubleshoot-sdk-activation-errors-on-react-natives-fast-refresh\}

React Native'de Adapty SDK ile geliştirme yaparken şu hatayla karşılaşabilirsiniz: `Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.`

Bu hata, React Native'in fast refresh özelliğinin geliştirme sırasında birden fazla etkinleştirme çağrısını tetiklemesinden kaynaklanır. Bunu önlemek için `__ignoreActivationOnFastRefresh` seçeneğini `__DEV__` (React Native'in geliştirme modu bayrağı) olarak ayarlayın.

```typescript showLineNumbers title="Typescript"
try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__, 
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Uygulamanız için hatayı uygun şekilde yönetin
}
```

#### Yerel test için mock modu ayarlayın \{#set-up-mock-mode-for-local-testing\}

Yerel geliştirme ve test için sandbox App Store/Google Play hesaplarına ihtiyaç duymadan ve iterasyon hızını artırmak amacıyla mock modunu etkinleştirebilirsiniz. Mock modu, Adapty'nin native modüllerini tamamen atlar ve simüle edilmiş veriler döndürür.

:::important
Mock modu, gerçek satın almaları test etmek için bir araç **değildir**:

- App Store / Google Play satın alma akışlarını **açmaz** ve gerçek işlemler **oluşturmaz**.
- **Adapty Paywall Builder (AdaptyUI)** ile oluşturulan paywall'ları/onboarding'leri **görüntülemez**.
- Adapty'nin native modülleri **tamamen atlanır**; Xcode/Android derlemesinde eksik native SDK dosyaları veya geçersiz bir API anahtarı bile hata tetiklemez.
- Adapty sunucularına veri gönderilmez.

Gerçek satın almaları ve Paywall Builder paywall'larını test etmek için mock modunu devre dışı bırakın ve sandbox hesapları kullanın.
:::

Mock modunu etkinleştirmek için `enableMock` değerini `true` olarak ayarlayın:

```typescript showLineNumbers title="App.tsx"
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  enableMock: true,
});
```

Mock modu etkinken:
- Tüm Adapty metodları, Adapty sunucularına ağ isteği göndermeden mock veri döndürür.
- Varsayılan olarak başlangıç mock profili aktif aboneliğe sahip değildir.
- Varsayılan olarak `makePurchase(...)` başarılı bir satın almayı simüle eder ve premium erişim sağlar.

Etkinleştirme sırasında `mockConfig` kullanarak mock verilerini özelleştirebilirsiniz. Yapılandırma formatını ve desteklenen parametreleri [buradan](https://react-native.adapty.io/interfaces/adaptymockconfig) inceleyin.

```typescript showLineNumbers title="App.tsx"

try {
   await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
      mockConfig: {
         // Başlangıç mock profilini özelleştirin (isteğe bağlı)
      },
   });
} catch (error) {
   console.error('Failed to activate Adapty SDK:', error);
}
```

Etkinleştirmeden önce SDK metodlarını çağırmanız gerekiyorsa (`isActivated()` veya `setLogLevel()` gibi), `activate()` öncesinde `enableMock()` kullanın. Köprü zaten başlatılmışsa bu metod hiçbir şey yapmaz.

```typescript showLineNumbers title="App.tsx"
adapty.enableMock(); // İsteğe bağlı: mock verilerini özelleştirmek için mockConfig geçin

// Artık etkinleştirmeden önce metodları çağırabilirsiniz

await adapty.activate('YOUR_PUBLIC_SDK_KEY');
```

## Sorun giderme \{#troubleshooting\}

#### Minimum iOS sürümü hatası \{#minimum-ios-version-error\}

Minimum iOS sürümü hatası alırsanız Podfile'ınızı güncelleyin:

```diff
-platform :ios, min_ios_version_supported
+platform :ios, '13.0'  # Yalnızca core özellikler için
# VEYA
+platform :ios, '15.0'  # Paywall builder ile oluşturulmuş paywall'lar kullanılıyorsa
```

#### Android Auto Backup manifest çakışması \{#android-auto-backup-manifest-conflict\}

Bazı SDK'lar (Adapty dahil) kendi Android Auto Backup yapılandırmasını içerir. Yedekleme kurallarını tanımlayan birden fazla SDK kullanıyorsanız, Android manifest birleştirme işlemi `android:fullBackupContent`, `android:dataExtractionRules` veya `android:allowBackup` ile ilgili bir hatayla başarısız olabilir.

Tipik hata belirtileri: `Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules)
is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)`

:::note
Bu değişiklikler Android platform dizininizde yapılmalıdır (genellikle projenizin `android/` klasöründe bulunur).
:::

Sorunu çözmek için şunları yapmanız gerekir:

- Manifest birleştirme işlemine, yedeklemeyle ilgili özellikler için uygulamanızın değerlerini kullanmasını söyleyin.

- Adapty'nin kurallarını diğer SDK'ların kurallarıyla birleştiren yedekleme kuralı dosyaları oluşturun.

#### 1. Manifestinize `tools` ad alanını ekleyin \{#1-add-the-tools-namespace-to-your-manifest\}

`AndroidManifest.xml` dosyanızda, kök `<manifest>` etiketinin tools içerdiğinden emin olun:

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>
```

#### 2. `<application>` içinde yedekleme özelliklerini geçersiz kılın \{#2-override-backup-attributes-in-application\}

Aynı `AndroidManifest.xml` dosyasında, `<application>` etiketini güncelleyerek uygulamanızın nihai değerleri sağlamasını ve manifest birleştirme işlemine kütüphane değerlerini değiştirmesini söyleyin:

```xml
<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"           
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">

    ...
</application>
```

Herhangi bir SDK de `android:allowBackup` ayarlıyorsa, bunu `tools:replace` içine ekleyin:

```xml
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
```

#### 3. Birleştirilmiş yedekleme kuralı dosyaları oluşturun \{#3-create-merged-backup-rules-files\}

Android projenizin `res/xml/` dizininde, Adapty'nin kurallarını diğer SDK'ların kurallarıyla birleştiren XML dosyaları oluşturun. Android, işletim sistemi sürümüne bağlı olarak farklı yedekleme kuralı formatları kullandığından, her iki dosyayı da oluşturmak uygulamanızın desteklediği tüm Android sürümleriyle uyumluluk sağlar.

:::note
Aşağıdaki örneklerde örnek bir üçüncü taraf SDK olarak AppsFlyer kullanılmaktadır. Uygulamanızda kullandığınız diğer SDK'lar için kuralları değiştirin veya ekleyin.
:::

**Android 12 ve üzeri için** (yeni veri çıkarma kuralları formatını kullanır):

```xml title="sample_data_extraction_rules.xml"
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </cloud-backup>

    <device-transfer>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </device-transfer>
</data-extraction-rules>
```

**Android 11 ve altı için** (eski tam yedekleme içeriği formatını kullanır):

```xml title="sample_backup_rules.xml"
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    
    <exclude domain="sharedpref" path="appsflyer-data"/>

    
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>

#### Android'de başka bir uygulamadan döndükten sonra satın almalar başarısız oluyor \{#purchases-fail-after-returning-from-another-app-in-android\}

Satın alma akışını başlatan Activity varsayılan olmayan bir `launchMode` kullanıyorsa, kullanıcı Google Play'den, bir bankacılık uygulamasından veya tarayıcıdan döndüğünde Android bunu yanlış şekilde yeniden oluşturabilir veya yeniden kullanabilir. Bu durum, satın alma sonucunun kaybolmasına veya iptal edilmiş olarak işlenmesine yol açabilir.

Satın almaların doğru çalışmasını sağlamak için satın alma akışını başlatan Activity'de yalnızca `standard` veya `singleTop` başlatma modlarını kullanın; diğer modlardan kaçının.

`AndroidManifest.xml` dosyanızda satın alma akışını başlatan Activity'nin `standard` veya `singleTop` olarak ayarlandığından emin olun:

```xml
<activity
    android:name=".MainActivity"
    android:launchMode="standard" />
```