---
title: "Adapty React Native SDK'yı bir Expo projesine yükleyin ve yapılandırın"
description: "Abonelik tabanlı uygulamalar için Expo projesine Adapty React Native SDK kurulumunu anlatan adım adım rehber."
---

:::important
Bu rehber, Adapty React Native SDK'yı **bir Expo projesine** yüklemeyi ve yapılandırmayı anlatmaktadır.

**Saf React Native (Expo olmadan) kullanıyorsanız**, bunun yerine [React Native kurulum rehberini](sdk-installation-react-native-pure) 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 zorunlu olan modüldür.
- **AdaptyUI**: Kolayca platformlar arası paywall oluşturmak için kullanıcı dostu, kodsuz bir araç olan [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanıyorsanız bu modüle ihtiyacınız vardır. AdaptyUI, core modülle birlikte otomatik olarak etkinleştirilir.

React Native uygulamanızda uygulama içi satın almayı nasıl uygulayacağınıza dair eksiksiz bir eğitim için [buraya](https://adapty.io/blog/react-native-in-app-purchases-tutorial/) göz atın.

:::tip
Adapty SDK'nın bir Expo uygulamasına nasıl entegre edildiğini gerçek bir örnekte görmek ister misiniz? Örnek uygulamalarımıza göz atın:
- Gerçek satın almalar ve Paywall Builder dahil tam işlevsellik için [Expo dev build örneği](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples/FocusJournalExpo)
- Mock modda test etmek için [Expo Go & Web örneği](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples/ExpoGoWebMock)
:::

Eksiksiz bir uygulama için videoyu da izleyebilirsiniz:
<div style={{ textAlign: 'center' }}>
<iframe width="560" height="315" src="https://www.youtube.com/embed/TtCJswpt2ms?si=FlFJGvpj-U33yoNK" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>

## Gereksinimler \{#requirements\}

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

:::info
Adapty, Google Play Billing Library 8.x sürümüne kadar uyumludur. Varsayılan olarak Adapty, 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). Expo için bu işlem prebuild sırasında veya bir config plugin aracılığıyla yapılabilir.
:::

---
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)

:::important
Adapty'yi bir Expo projesinde kullanmak için [Expo Dev Client](https://docs.expo.dev/versions/latest/sdk/dev-client/) (özel geliştirme derlemesi) gereklidir.

Expo Go özel yerel modülleri desteklemez; bu nedenle yalnızca UI/mantık geliştirmesi için [**mock modda**](#set-up-mock-mode-for-expo-go--expo-web) kullanılabilir (gerçek satın alma yoktur ve AdaptyUI/Paywall Builder işlenemez).
:::

1. Adapty SDK'yı yükleyin (`@adapty/core` otomatik olarak da yüklenir):
   ```sh
   npx expo install react-native-adapty
   npx expo prebuild
   ```
2. EAS veya yerel derleme kullanarak uygulamanızı geliştirme için derleyin:

   <Tabs>
   <TabItem value="eas" label="EAS build" default>
      ```sh 
      # For iOS
      eas build --profile development --platform ios

   # For Android
   eas build --profile development --platform android
      ```
   </TabItem>
   
   <TabItem value="local" label="Local build">
      ```sh 
      # For iOS
      npx expo run:ios
      
      # For Android
      npx expo run:android
      ```
   </TabItem>
   </Tabs>
3. Geliştirme sunucusunu başlatın:
   ```sh 
   npx expo start --dev-client
   ```

## 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) bakın.
:::

Şimdi uygulamanızda paywallları ayarlayın:

- [Adapty Paywall Builder](adapty-paywall-builder) kullanıyorsanız [Paywall Builder hızlı başlangıç](react-native-quickstart-paywalls) kılavuzunu takip edin.
- Kendi paywall arayüzünüzü oluşturuyorsanız [özel paywallar için hızlı başlangıç](react-native-quickstart-manual) kılavuzuna 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 olacaktır. 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. Aşağıdaki log seviyeleri mevcuttur:

| Seviye     | Açıklama                                                     |
| ---------- | ------------------------------------------------------------ |
| `error`    | Yalnızca hatalar loglanır                                    |
| `warn`     | Hatalar ve kritik sorunlara 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 uygulamanızda Adapty yapılandırmasından önce veya sırasında ayarlayabilirsiniz:

```typescript showLineNumbers title="App.tsx"
// Set log level before activation
// 'verbose' is recommended for development and the first production release
adapty.setLogLevel('verbose');

// Or set it during configuration
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.

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 gerekmediğinde gereksiz veri toplamayı azaltmak amacıyla bu parametreyi 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.

App Store/Play Store politikalarına uymak, Uygulama İzleme Şeffaflığı istemini tetiklemekten kaçınmak ya da uygulamanız reklam kimliklerine dayalı attribution veya analiz gerektirmiyorsa bu parametreyi 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\}

Varsayılan olarak AdaptyUI, performansı artırmak ve ağ kullanımını azaltmak için medyayı (resimler ve videolar 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, // Optional: memory cache size in bytes
    memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
    diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
  },
});
```

Parametreler:
| Parametre | Zorunlu | Açıklama |
|-----------|----------|-------------|
| memoryStorageTotalCostLimit | isteğe bağlı | Bellekteki toplam önbellek boyutu (bayt cinsinden). Varsayılan olarak platforma özgü değer kullanılır. |
| memoryStorageCountLimit | isteğe bağlı | Bellek depolama alanındaki maksimum öğe sayısı. Varsayılan olarak platforma özgü değer kullanılır. |
| diskStorageSizeLimit | isteğe bağlı | Disk üzerindeki dosya boyutu sınırı (bayt cinsinden). Varsayılan olarak platforma özgü değer kullanılır. |

### 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,      
  },
});
```

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

`clearDataOnBackup` değeri `true` olarak ayarlandığında SDK, uygulamanın bir iCloud yedeğinden geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywalllar dahil olmak üzere yerel olarak depolanan tüm 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 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\}

#### Expo Go / Expo Web için mock modu ayarlayın \{#set-up-mock-mode-for-expo-go--expo-web\}

Expo Go ve Expo Web ortamları Adapty'nin yerel modüllerine erişemez. Çalışma zamanı hatalarından kaçınırken uygulamanızın arayüzünü ve paywall mantığını oluşturup test edebilmek için Adapty **mock modu** sunar.

::::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/onboarding'leri **işlemez**.
- Adapty'nin yerel modülleri **tamamen atlanır**; Xcode/Android derlemesinde eksik yerel SDK dosyaları veya geçersiz bir API anahtarı bile hata tetiklemez.

Gerçek satın almaları ve Paywall Builder paywalllarını test etmek için mock modun otomatik olarak devre dışı bırakıldığı bir Expo Dev Client / production derlemesi kullanın.
::::

**Varsayılan olarak** SDK, Expo Go ve web ortamlarını otomatik olarak algılar ve mock modu etkinleştirir. Mock verilerini özelleştirmek istemediğiniz sürece herhangi bir şey yapılandırmanız gerekmez.

Mock modu etkin olduğunda:
- Tüm Adapty metodları, Adapty sunucularına ağ isteği göndermeden mock veriler döndürür.
- Varsayılan olarak başlangıç mock profilinde aktif abonelik yoktur.
- 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 verileri özelleştirebilirsiniz. Yapılandırma formatı ve desteklenen parametreler [burada](https://react-native.adapty.io/interfaces/adaptymockconfig) mevcuttur.

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

try {
  await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
    mockConfig: {
      // Customize the initial mock profile (optional)
    },
  });
} 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(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

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

#### 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 getirir; böylece güncel verilere daha hızlı erişim sağlanır.

Ancak bu durum, geliştirme sırasında sık sık 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ı verilerini almak için yaptığı istekleri erteleyebilir.

`__debugDeferActivation` özelliği etkinleştirildiğinde, activate çağrısı bir sonraki Adapty SDK çağrısına kadar bekletilir. Bu, kimlik doğrulama verisi gerekmiyorsa gereksiz istem görüntülenmesini engeller.

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

Kullanım için önerilen yaklaşım:

```typescript showLineNumbers title="Typescript"
try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' from any 3rd party library
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}
```

#### 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 `__DEV__` (React Native'in geliştirme modu bayrağı) olarak ayarlanmış `__ignoreActivationOnFastRefresh` seçeneğini kullanın.
```typescript showLineNumbers title="Typescript"
try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__, 
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}
```

## Sorun Giderme \{#troubleshooting\}

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

iOS için derleme yaparken, özellikle **iOS 15.0+** gerektiren [Adapty paywall builder](adapty-paywall-builder) ile oluşturulan paywallları kullanıyorsanız **minimum iOS sürümü** veya deployment target hakkında bir hata alabilirsiniz.

Expo, `expo prebuild` sırasında iOS projesini (`Podfile` dahil) oluşturduğundan **`Podfile`'ı doğrudan düzenlememek gerekir**. Bunun yerine `expo-build-properties` config plugin aracılığıyla deployment target'ı yapılandırın.

1. Plugin'i yükleyin:

   ```sh
   npx expo install expo-build-properties
   ```
2. iOS deployment target'ı ayarlamak için Expo yapılandırmanızı (`app.json` veya `app.config.js`) güncelleyin:

```
{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Use "13.0" for core Adapty features only,
                        // or "15.0" if you use paywalls created in the paywall builder.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
```

3. Yerel iOS projesini yeniden oluşturun ve yeniden derleyin:

```
npx expo prebuild --clean
npx expo run:ios      # or `eas build -p ios` on your CI
```

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

Expo'yu Android Auto Backup yapılandıran birden fazla SDK ile (Adapty, AppsFlyer veya expo-secure-store gibi) kullanırken bir manifest birleştirme çakışmasıyla karşılaşabilirsiniz.

Tipik bir hata şöyle görünür: `Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306
is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules).`

Bu çakışmayı çözmek için Android yedekleme yapılandırmasını Adapty plugin'inin yönetmesine izin vermeniz gerekir.
Projenizde ayrıca `expo-secure-store` kullanıyorsanız çakışmayı önlemek için kendi yedekleme kurulumunu devre dışı bırakın.

`app.json` dosyanızı şu şekilde yapılandırın:

```json title="app.json"
{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}
```
`replaceAndroidBackupConfig` seçeneği varsayılan olarak `false`'tur. Etkinleştirildiğinde Adapty plugin'inin Android yedekleme kurallarını kontrol etmesini sağlar.
SecureStore'un yedekleme yapılandırması artık Adapty tarafından yönetileceğinden uyarıları önlemek için `expo-secure-store` kullanıyorsanız `"configureAndroidBackup": false` ekleyin.

:::important
Bu kurulum yalnızca Adapty, AppsFlyer ve expo-secure-store için yedekleme gereksinimlerini dikkate alır.
Projenizdeki diğer kütüphaneler özel yedekleme kuralları tanımlıyorsa bunları manuel olarak yapılandırmanız gerekir.
:::