# REACT-NATIVE - Adapty Documentation (Full Content) This file contains the complete content of all documentation pages for this platform. Locale: tr Generated on: 2026-07-24T13:02:34.384Z Total files: 45 --- # File: sdk-installation-react-native-expo --- --- title: "Adapty React Native SDK'yı Expo projesine kurma ve yapılandırma" description: "Abonelik tabanlı uygulamalar için Adapty React Native SDK'yı Expo projesine adım adım kurma kılavuzu." --- :::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. ::: ## Adapty SDK'yı Expo'ya kurma \{#install-adapty-sdk-to-expo\} Adapty SDK çalışabilmesi için native modüllere ihtiyaç duyduğundan, Expo Go ile kullanılamaz. Bunun yerine geliştirme için [Expo Dev Client](https://docs.expo.dev/develop/development-builds/introduction/) kullanmanız gerekir. ### 1. Adapty paketlerini yükleme \{#install-adapty-packages\} Projenizin kök dizininde aşağıdaki komutu çalıştırın: ```bash title="Bash" npx expo install react-native-adapty ``` ### 2. Expo config plugin'ini yapılandırma \{#configure-expo-config-plugin\} Adapty'nin Expo config plugin'ini `app.json` veya `app.config.js` dosyanıza ekleyin: ```json title="app.json" { "expo": { "plugins": [ "react-native-adapty" ] } } ``` ### 3. Native projeyi yeniden derleme \{#rebuild-native-project\} Config plugin'ini ekledikten sonra native projeyi yeniden derlemeniz gerekir: ```bash title="Bash" npx expo prebuild --clean ``` Ardından uygulamanızı çalıştırın: ```bash title="Bash" npx expo run:ios ``` ```bash title="Bash" npx expo run:android ``` ## Adapty SDK'yı yapılandırma \{#configure-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 gidin. 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 değiştirin. Ya da [Adapty CLI](developer-cli) kullanarak programatik olarak alın: ``` npm install -g adapty adapty auth login adapty apps list ``` Ya da doğrudan: ``` npx adapty auth login adapty apps list ``` - Adapty başlatma işlemi için **Public SDK key** kullandığınızdan emin olun; **Secret key** yalnızca [sunucu taraflı API](getting-started-with-server-side-api) için kullanılmalıdır. - **SDK key**'leri her uygulama için benzersizdir, bu nedenle birden fazla uygulamanız varsa doğru olanı seçtiğinizden emin olun. Adapty SDK'yı yapılandırmak için `activate` metodunu uygulama başlangıcında çağırın: ```typescript title="App.tsx" activateAdapty({ apiKey: 'PUBLIC_SDK_KEY' }); ``` `PUBLIC_SDK_KEY` değerini kendi Adapty public SDK anahtarınızla değiştirdiğinizden emin olun. :::warning Adapty'yi birden fazla kez başlatmayın. SDK'nın uygulama yaşam döngüsü boyunca yalnızca bir kez çağrılması gerekir. ::: ## Yedekleme kuralları \{#backup-rules\} 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 `` etiketinin tools içerdiğinden emin olun: ```xml ... ``` #### 2. `` içinde yedekleme özelliklerini geçersiz kılın \{#2-override-backup-attributes-in-application\} Aynı `AndroidManifest.xml` dosyasında, `` 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 ... ``` 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" ``` **Android 11 ve altı için** (eski tam yedekleme içeriği formatını kullanır): ```xml title="sample_backup_rules.xml" ## Örnek uygulama \{#sample-app\} :::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. ::: :::important Bu kılavuz, Adapty React Native SDK'sını **bir Expo projesine** kurma ve yapılandırma adımlarını ele almaktadır. **Saf React Native (Expo olmadan)** kullanıyorsanız, bunun yerine [React Native kurulum kılavuzunu](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**: Bu modül, Adapty'nin uygulamanızda düzgün çalışması için gereklidir. - **AdaptyUI**: Bu modül, platformlar arası paywall'lar oluşturmak için kullanılan, kod gerektirmeyen kullanıcı dostu bir araç olan [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanıyorsanız gereklidir. AdaptyUI, core modülüyle birlikte otomatik olarak etkinleştirilir. React Native uygulamanızda uygulama içi satın alma (IAP) entegrasyonunun nasıl yapılacağına dair kapsamlı bir rehber arıyorsanız [şuraya](https://adapty.io/blog/react-native-in-app-purchases-tutorial/) göz atabilirsiniz. :::tip Adapty SDK'nın bir Expo uygulamasına nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Örnek uygulamalarımıza göz atın: - Gerçek satın almalar ve Paywall Builder dahil tüm işlevsellik için [Expo dev build örneği](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples/FocusJournalExpo) - Mock modla test etmek için [Expo Go & Web örneği](https://github.com/adaptyteam/AdaptySDK-React-Native/tree/master/examples/ExpoGoWebMock) ::: Eksiksiz bir uygulama adım adım anlatımı için şu videoyu da izleyebilirsiniz:
## Gereksinimler \{#requirements\} Adapty React Native SDK, iOS 15.0+ gerektirir. iOS için derleme yapmak **Swift 6.0** veya sonrasını gerektirir. [Kids Mode](kids-mode-react-native) **Swift 6.1** veya sonrasını gerektirir. :::info SDK v3.17'den itibaren Adapty SDK varsayılan olarak Google Play Billing Library v8.0.0 kullanır. ::: :::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. ::: ## Adapty SDK'yı Yükleyin \{#install-adapty-sdk\} :::important v4'ten itibaren, Adapty React Native SDK artık yerel bağımlılıklarının CocoaPods ile kurulumunu desteklememektedir. v4 veya daha sonrasına ihtiyacınız varsa ([Flow Builder](adapty-flow-builder) için), bunun yerine aşağıdaki [Adapty SDK 4.0: Swift Package Manager'ı etkinleştirin](#adapty-sdk-40-enable-swift-package-manager) bölümünü izleyin. ::: [![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 Bir Expo projesinde Adapty'yi kullanmak için [Expo Dev Client](https://docs.expo.dev/versions/latest/sdk/dev-client/) (özel bir geliştirme derlemesi) gereklidir. Expo Go özel yerel modülleri desteklemez, bu yüzden onu yalnızca UI/mantık geliştirmesi için [**mock modu**](#set-up-mock-mode-for-expo-go--expo-web) ile kullanabilirsiniz (gerçek satın almalar ve AdaptyUI/Paywall Builder render'ı olmadan). ::: 1. Adapty SDK'yı yükleyin (bu, `@adapty/core`'u da otomatik olarak yükler): ```sh npx expo install react-native-adapty npx expo prebuild ``` 2. Uygulamanızı EAS veya yerel derleme kullanarak geliştirme için derleyin: ```sh # For iOS eas build --profile development --platform ios # For Android eas build --profile development --platform android ``` ```sh # For iOS npx expo run:ios # For Android npx expo run:android ``` 3. Geliştirme sunucusunu başlatın: ```sh npx expo start --dev-client ``` ### Adapty SDK 4.0: Swift Package Manager'ı etkinleştir \{#adapty-sdk-40-enable-swift-package-manager\} React Native SDK 4.0 — [Flow Builder](adapty-flow-builder) desteği ekleyen bu sürüm — **React Native 0.75 veya üstü** gerektirir. SDK'yı yükleyin: ```sh npx expo install react-native-adapty@^4.0.0 ``` v4, yerel iOS SDK'larını (`Adapty`, `AdaptyUI`, `AdaptyPlugin`) CocoaPods alt bağımlılıkları yerine Swift Package Manager aracılığıyla çeker ([CocoaPods spec deposu Aralık 2026'da salt okunur hale geliyor](https://blog.cocoapods.org/CocoaPods-Specs-Repo/)). SPM dinamik framework'ler gerektirir; bunları Expo'da [`expo-build-properties`](https://docs.expo.dev/versions/latest/sdk/build-properties/) eklentisiyle etkinleştirirsiniz. `app.json` (veya `app.config.js`) dosyasına ekleyin: ```json showLineNumbers title="app.json" { "expo": { "plugins": [ [ "expo-build-properties", { "ios": { "useFrameworks": "dynamic" } } ] ] } } ``` Ardından eklentiyi yükleyin ve yerel projeyi yeniden oluşturun: ```sh npx expo install expo-build-properties npx expo prebuild --clean ``` Tam migration için [Adapty React Native SDK'yı v4'e Taşıma](migration-to-react-native-sdk-v4) sayfasına bakın. ## Adapty SDK'nın Adapty modülünü etkinleştirme \{#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 gidin. 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 değiştirin. Ya da [Adapty CLI](developer-cli) kullanarak programatik olarak alın: ``` npm install -g adapty adapty auth login adapty apps list ``` Ya da doğrudan: ``` npx adapty auth login adapty apps list ``` - Adapty başlatma işlemi için **Public SDK key** kullandığınızdan emin olun; **Secret key** yalnızca [sunucu taraflı API](getting-started-with-server-side-api) için kullanılmalıdır. - **SDK key**'leri her uygulama için benzersizdir, bu nedenle 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'); ``` :::important Diğer Adapty SDK metodlarını çağırmadan önce `activate` işleminin tamamlanmasını bekleyin. Tam sıralama için [React Native SDK'da çağrı sırası](react-native-sdk-call-order) sayfasına bakın. ::: Şimdi uygulamanızda paywallları ayarlayın: - [Adapty Paywall Builder](adapty-paywall-builder) kullanıyorsanız, [Paywall Builder hızlı başlangıç kılavuzunu](react-native-quickstart-paywalls) takip edin. - Kendi paywall arayüzünüzü oluşturuyorsanız, [özel paywall'lar için hızlı başlangıç kılavuzuna](react-native-quickstart-manual) bakın. :::tip Geliştirme ortamında aktivasyon hatalarından kaçınmak için [ipuçlarını](#development-environment-tips) inceleyin. ::: ## 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\} ### Günlükleme \{#logging\} #### Günlük 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 kaydeder. Aşağıdaki seviyeler mevcuttur: | Level | Description | | ---------- | ------------------------------------------------------------ | | `error` | Yalnızca hatalar loglanır | | `warn` | Hatalar ve SDK'dan gelen kritik hatalara yol açmayan ancak dikkat edilmesi gereken mesajlar loglanır | | `info` | Hatalar, uyarılar ve çeşitli bilgi mesajları loglanır | | `verbose` | Hata ayıklama sırasında işe yarayabilecek her türlü ek bilgi (fonksiyon çağrıları, API sorguları vb.) loglanır | Adapty yapılandırmasından önce veya yapılandırma sırasında uygulamanızda log seviyesini 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üvenliği politikaları uygulayabilirsiniz. #### IP adresi toplama ve paylaşımını devre dışı bırakma \{#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 IP tabanlı özellikler uygulamanız için gerekli değilse gereksiz veri toplamayı azaltmak için bu parametreyi kullanabilirsiniz. ```typescript showLineNumbers title="App.tsx" adapty.activate('YOUR_PUBLIC_SDK_KEY', { ipAddressCollectionDisabled: true, }); ``` #### Reklam kimliği toplama ve paylaşımını devre dışı bırakma \{#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, App Tracking Transparency isteğini tetiklemekten kaçınmak veya uygulamanız reklam ID'lerine dayalı attribution ya da analitik gerektirmiyorsa kullanabilirsiniz. ```typescript showLineNumbers title="App.tsx" adapty.activate('YOUR_PUBLIC_SDK_KEY', { ios: { idfaCollectionDisabled: true, }, android: { adIdCollectionDisabled: true, }, }); ``` #### AdaptyUI için medya önbelleği yapılandırmasını ayarlama \{#set-up-media-cache-configuration-for-adaptyui\} AdaptyUI, performansı artırmak ve ağ kullanımını azaltmak için medyayı (resimler ve videolar gibi) varsayılan olarak ö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 }, }); ``` | Parametre | Gerekli | Açıklama | |-----------|----------|-------------| | memoryStorageTotalCostLimit | isteğe bağlı | Bellekteki toplam önbellek boyutu (bayt cinsinden). Varsayılan değer platforma göre değişir. | | memoryStorageCountLimit | isteğe bağlı | Bellek deposundaki öğe sayısı limiti. Varsayılan değer platforma göre değişir. | | diskStorageSizeLimit | isteğe bağlı | Diskteki dosya boyutu limiti (bayt cinsinden). Varsayılan değer platforma göre değişir. | ### 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 mod kurulumu \{#set-up-mock-mode-for-expo-go--expo-web\} Expo Go ve Expo Web ortamları, Adapty'nin native modüllerine erişemez. Uygulamanızın arayüzünü ve paywall mantığını geliştirip test edebilmek için çalışma zamanı hatalarından kaçınmak amacıyla Adapty, **mock mod** sunar. ::::important Mock mod, gerçek satın almaları test etmek için kullanılan bir araç **değildir**: - App Store / Google Play satın alma akışlarını **açmaz** ve gerçek işlem **oluşturmaz**. - **Adapty Paywall Builder (AdaptyUI)** ile oluşturulmuş paywall'ları/onboarding'leri **render etmez**. - Adapty'nin yerel modülleri **tamamen devre dışı bırakılı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 paywall'larını test etmek için mock modunun otomatik olarak devre dışı bırakıldığı bir Expo Dev Client / production build kullanın. :::: **Varsayılan olarak**, SDK Expo Go ve web ortamlarını otomatik olarak algılar ve sahte mod'u etkinleştirir. Sahte verileri özelleştirmek istemiyorsanız herhangi bir yapılandırma yapmanıza gerek yoktur. Sahte mod etkinken: - Tüm Adapty metodları, Adapty sunucularına ağ isteği göndermeksizin sahte veriler döndürür. - Varsayılan olarak, başlangıçtaki sahte profilin aktif aboneliği yoktur. - Varsayılan olarak, `makePurchase(...)` başarılı bir satın alma işlemini simüle eder ve premium erişim sağlar. Aktivasyon sırasında `mockConfig` kullanarak mock verileri özelleştirebilirsiniz. Konfigürasyon formatı ve desteklenen parametreler için [buraya](https://react-native.adapty.io/interfaces/adaptymockconfig) bakın. ```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); } ``` SDK metodlarını aktivasyondan önce çağırmanız gerekiyorsa (örneğin `isActivated()` veya `setLogLevel()`), `activate()` öncesinde `enableMock()` kullanın. Bridge 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çebilirsiniz // Artık aktivasyondan önce metodları çağırabilirsiniz await adapty.activate('YOUR_PUBLIC_SDK_KEY'); ``` #### Geliştirme amacıyla SDK aktivasyonunu geciktirme \{#delay-sdk-activation-for-development-purposes\} Adapty, SDK etkinleştirildiğinde tüm gerekli kullanıcı verilerini önceden alarak daha hızlı ve güncel veri erişimi sağlar. Ancak bu durum, geliştirme sırasında sıkça kimlik doğrulama isteyen iOS simülatöründe sorun çıkarabilir. Adapty, StoreKit kimlik doğrulama akışını kontrol edemese de SDK'nın güncel kullanıcı verisi almak için yaptığı istekleri erteleyebilir. `__debugDeferActivation` özelliğini etkinleştirdiğinizde, activate çağrısı bir sonraki Adapty SDK çağrısına kadar bekletilir. Bu sayede kimlik doğrulama verisi gerekmiyorsa gereksiz istemlerle karşılaşmazsınız. Bu özelliğin **yalnızca geliştirme amaçlı kullanım için tasarlandığını** belirtmek önemlidir; zira tüm olası kullanıcı senaryolarını kapsamaz. Üretim ortamında aktivasyon geciktirilmemelidir; gerçek cihazlar genellikle kimlik doğrulama verilerini hatırlar ve kullanıcıdan tekrar tekrar kimlik bilgisi girmesini istemez. Kullanım için önerilen yaklaşım şöyledir: ```typescript showLineNumbers title="Typescript" try { adapty.activate('PUBLIC_SDK_KEY', { __debugDeferActivation: isSimulator(), // 'isSimulator' herhangi bir 3. parti kütüphaneden }); } catch (error) { console.error('Adapty SDK etkinleştirilemedi:', error); // Uygulamanız için hatayı uygun şekilde ele alın } ``` #### React Native'in Fast Refresh özelliğinde SDK etkinleştirme hatalarını giderme \{#troubleshoot-sdk-activation-errors-on-react-natives-fast-refresh\} Adapty SDK ile React Native üzerinde 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 durum, React Native'in hızlı yenileme (fast refresh) özelliğinin geliştirme sırasında birden fazla aktivasyon ç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); // 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, **minimum iOS sürümü** veya dağıtım hedefiyle ilgili bir hata görebilirsiniz. Adapty **iOS 15.0+** gerektirir. Expo, iOS projesini (`Podfile` dahil) `expo prebuild` sırasında oluşturduğundan, **`Podfile`'ı doğrudan düzenlememelisiniz**. Bunun yerine, dağıtım hedefini `expo-build-properties` yapılandırma eklentisi aracılığıyla ayarlayın. 1. Eklentiyi yükleyin: ```sh npx expo install expo-build-properties ``` 2. iOS dağıtım hedefini 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": { // Adapty requires iOS 15.0+. "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\} Android Auto Backup'ı yapılandıran birden fazla SDK (Adapty, AppsFlyer veya expo-secure-store gibi) ile Expo 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 Adapty eklentisinin Android yedekleme yapılandırmasını yönetmesine izin vermeniz gerekiyor. Projeniz aynı zamanda `expo-secure-store` kullanıyorsa, ç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 eklentisinin Android yedekleme kurallarını yönetmesine olanak tanır. `expo-secure-store` kullanıyorsanız uyarıları önlemek için `"configureAndroidBackup": false` ekleyin; çünkü SecureStore'un yedekleme yapılandırması artık Adapty tarafından yönetilecektir. :::important Bu kurulum yalnızca Adapty, AppsFlyer ve expo-secure-store için yedekleme gereksinimlerini dikkate alır. Projenizde başka kütüphaneler özel yedekleme kuralları tanımlıyorsa, bunları manuel olarak yapılandırmanız gerekir. ::: --- # File: sdk-installation-react-native-pure --- --- title: "Adapty SDK'yı saf bir React Native projesine yükleyin ve yapılandırın" description: "React Native'de abonelik tabanlı uygulamalar için Adapty SDK'yı adım adım yükleme kılavuzu." --- :::important Bu kılavuz yalnızca **saf React Native (Expo olmayan) projeleri** için geçerlidir. **Expo** kullanıyorsanız, bunun yerine [Expo kurulum kılavuzunu](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**: Bu modül, Adapty'nin uygulamanızda düzgün çalışması için gereklidir. - **AdaptyUI**: Bu modül, kolayca platformlar arası paywall'lar oluşturmak için kullanıcı dostu, kodsuz bir araç olan [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanıyorsanız gereklidir. AdaptyUI, core modülüyle 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'ları görüntüleme, satın alma yapma ve diğer temel işlevleri içeren 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 15.0+ gerektirir. iOS için derleme yapmak **Swift 6.0** veya sonrasını gerektirir. [Kids Mode](kids-mode-react-native) **Swift 6.1** veya sonrasını gerektirir. :::info SDK v3.17'den itibaren Adapty SDK varsayılan olarak Google Play Billing Library v8.0.0 kullanır. ::: :::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. ::: ## Adapty SDK'yı Yükleyin \{#install-adapty-sdk\} :::important v4'ten itibaren Adapty React Native SDK, yerel bağımlılıklarının CocoaPods ile kurulumunu artık desteklememektedir. v4 veya sonrasına ihtiyacınız varsa ([Flow Builder](adapty-flow-builder) için), bunun yerine aşağıdaki [Adapty SDK 4.0: Swift Package Manager'ı etkinleştirme](#adapty-sdk-40-enable-swift-package-manager) bölümünü takip edin. ::: [![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 (bu, `@adapty/core`'u da otomatik olarak yükler): ```sh showLineNumbers title="Shell" # using npm npm install react-native-adapty # or using yarn yarn add react-native-adapty ``` 2. iOS için pod'ları yükleyin: ```sh showLineNumbers title="Shell" cd ios && pod install ```
Android için, React Native sürümünüz 0.73.0'dan eskiyse (genişletmek için tıklayın) `/android/build.gradle` dosyasını güncelleyin. `kotlin-gradle-plugin:1.8.0` bağımlılığının veya daha yenisinin bulunduğundan emin olun: ```groovy showLineNumbers title="/android/build.gradle" ... buildscript { ... dependencies { ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0" } } ... ```
### Adapty SDK 4.0: Swift Package Manager'ı etkinleştirin \{#adapty-sdk-40-enable-swift-package-manager\} React Native SDK 4.0 — [Flow Builder](adapty-flow-builder) desteği ekleyen — **React Native 0.75 veya üstünü** gerektirir. SDK'yı yükleyin: ```sh showLineNumbers title="Shell" npm install react-native-adapty@^4.0.0 # or using yarn yarn add react-native-adapty@^4.0.0 ``` v4, yerel iOS SDK'larını (`Adapty`, `AdaptyUI`, `AdaptyPlugin`) CocoaPods alt bağımlılıkları yerine Swift Package Manager aracılığıyla çeker ([CocoaPods spec deposu Aralık 2026'da salt okunur hale geliyor](https://blog.cocoapods.org/CocoaPods-Specs-Repo/)). SPM dinamik framework'ler gerektirir — `ios/Podfile` hedefine aşağıdakini ekleyin, ardından pod'ları yeniden yükleyin: ```ruby showLineNumbers title="ios/Podfile" use_frameworks! :linkage => :dynamic ``` ```sh showLineNumbers title="Shell" cd ios && pod install --repo-update ``` Daha önce `Adapty`, `AdaptyUI` veya `AdaptyPlugin`'i CocoaPods alt bağımlılıkları olarak eklediyseniz, önce `Podfile` dosyanızdan açık `pod 'Adapty'`, `pod 'AdaptyUI'` veya `pod 'AdaptyPlugin'` satırlarını kaldırın. :::warning Varsayılan statik bağlamadan dinamik framework'lere geçiş yapmak, modüler başlıkları henüz desteklemeyen kütüphanelerle çakışabilir ve Flipper ile uyumsuzdur. Ayrıntılar için [React Native SDK'yı v4'e Taşıma](migration-to-react-native-sdk-v4) sayfasına bakın. ::: ## 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 gidin. 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 değiştirin. Ya da [Adapty CLI](developer-cli) kullanarak programatik olarak alın: ``` npm install -g adapty adapty auth login adapty apps list ``` Ya da doğrudan: ``` npx adapty auth login adapty apps list ``` - Adapty başlatma işlemi için **Public SDK key** kullandığınızdan emin olun; **Secret key** yalnızca [sunucu taraflı API](getting-started-with-server-side-api) için kullanılmalıdır. - **SDK key**'leri her uygulama için benzersizdir, bu nedenle 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'); ``` :::important Başka herhangi bir Adapty SDK metodunu çağırmadan önce `activate` işleminin tamamlanmasını bekleyin. Tam sıra için [React Native SDK'da çağrı sırası](react-native-sdk-call-order) sayfasına bakın. ::: Şimdi uygulamanızda paywallları ayarlayın: - [Adapty Paywall Builder](adapty-paywall-builder) kullanıyorsanız, [Paywall Builder hızlı başlangıç kılavuzunu](react-native-quickstart-paywalls) inceleyin. - Kendi paywall arayüzünüzü oluşturuyorsanız, [özel paywall'lar için hızlı başlangıç kılavuzuna](react-native-quickstart-manual) bakın. :::tip Geliştirme ortamında aktivasyon hatalarından kaçınmak için [ipuçlarına](#development-environment-tips) göz atı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\} ### Günlükleme \{#logging\} #### Günlükleme sistemini kurun \{#set-up-the-logging-system\} Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri günlüğe kaydeder. Aşağıdaki seviyeler mevcuttur: | Level | Description | | ---------- | ------------------------------------------------------------ | | `error` | Yalnızca hatalar kaydedilir | | `warn` | Hatalar ve SDK'dan gelen kritik hatalara yol açmayan ancak dikkat edilmesi gereken mesajlar kaydedilir | | `info` | Hatalar, uyarılar ve çeşitli bilgi mesajları kaydedilir | | `verbose` | Fonksiyon çağrıları, API sorguları gibi hata ayıklama sırasında işe yarayabilecek tüm ek bilgiler kaydedilir | Adapty yapılandırmasından önce veya yapılandırma sırasında uygulamanızda log seviyesini 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, açıkça göndermediğiniz sürece kullanıcılarınızın kişisel verilerini saklamaz; ancak mağaza veya ülke gerekliliklerine uymak için ek veri güvenliği politikaları uygulayabilirsiniz. #### IP adresi toplama ve paylaşımını devre dışı bırakma \{#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 IP tabanlı özelliklere ihtiyaç duymadığınız durumlarda gereksiz veri toplamayı azaltmak için bu parametreyi kullanabilirsiniz. ```typescript showLineNumbers title="App.tsx" adapty.activate('YOUR_PUBLIC_SDK_KEY', { ipAddressCollectionDisabled: true, }); ``` #### Reklam kimliği toplama ve paylaşımını devre dışı bırakma \{#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, App Tracking Transparency istemini tetiklemekten kaçınmak veya uygulamanız reklam kimliklerine dayalı attribution ya da 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ı (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 }, }); ``` | Parametre | Zorunlu | Açıklama | |-----------|----------|-------------| | memoryStorageTotalCostLimit | isteğe bağlı | Bellekteki toplam önbellek boyutu (bayt cinsinden). Varsayılan değer platforma göre değişir. | | memoryStorageCountLimit | isteğe bağlı | Bellek depolamasının öğe sayısı sınırı. Varsayılan değer platforma göre değişir. | | diskStorageSizeLimit | isteğe bağlı | Diskteki dosya boyutu sınırı (bayt cinsinden). Varsayılan değer platforma göre değişir. | ### 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 aktivasyonunu geciktirme \{#delay-sdk-activation-for-development-purposes\} Adapty, SDK aktivasyonu sırasında gerekli tüm kullanıcı verilerini önceden alarak daha hızlı erişim sağlar. 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 SDK'nın güncel kullanıcı verisi almak için yaptığı istekleri erteleyebilir. `__debugDeferActivation` özelliğini etkinleştirerek, bir sonraki Adapty SDK çağrısını yapana kadar aktivasyon çağrısı bekletilir. Bu, ihtiyaç duyulmadığında kimlik doğrulama verileri için gereksiz istemlerden kaçınmanızı sağlar. **Bu özelliğin yalnızca geliştirme amaçlı kullanıma yönelik olduğunu** belirtmek önemlidir; zira tüm olası kullanıcı senaryolarını kapsamaz. Prodüksiyonda aktivasyon geciktirilmemelidir; gerçek cihazlar genellikle kimlik doğrulama verilerini hatırlar ve kimlik bilgilerini tekrar tekrar sormaz. İşte önerilen kullanım yaklaşımı: ```typescript showLineNumbers title="Typescript" try { adapty.activate('PUBLIC_SDK_KEY', { __debugDeferActivation: isSimulator(), // herhangi bir 3. taraf kütüphanesinden 'isSimulator' }); } catch (error) { console.error('Adapty SDK etkinleştirilemedi:', error); // Uygulamanız için hatayı uygun şekilde ele alın } ``` #### React Native'in Fast Refresh özelliğinde SDK etkinleştirme hatalarını giderme \{#troubleshoot-sdk-activation-errors-on-react-natives-fast-refresh\} Adapty SDK ile React Native'de 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 durum, React Native'in hızlı yenileme (fast refresh) özelliğinin geliştirme sürecinde birden fazla aktivasyon ç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); // Handle the error appropriately for your app } ``` #### Yerel test için mock modu kurma \{#set-up-mock-mode-for-local-testing\} Yerel geliştirme ve test süreçlerinde, sandbox App Store/Google Play hesaplarına ihtiyaç duymadan hızlı iterasyon yapabilmek için mock modunu etkinleştirebilirsiniz. Mock modu, Adapty'nin native modüllerini tamamen devre dışı bırakarak 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şlem **oluşturmaz**. - **Adapty Paywall Builder (AdaptyUI)** ile oluşturulan paywall'ları/onboarding'leri **render etmez**. - Adapty'nin yerel modülleri **tamamen atlanır**; Xcode/Android derlemesinde yerel SDK dosyalarının eksik olması veya geçersiz bir API anahtarı hata tetiklemez. - Adapty sunucularına hiçbir 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 sahte veriler döndürür. - Varsayılan olarak, başlangıç mock profili aktif abonelik içermez. - Varsayılan olarak, `makePurchase(...)` başarılı bir satın alma simüle eder ve premium erişim sağlar. Mock verilerini, aktivasyon sırasında `mockConfig` kullanarak özelleştirebilirsiniz. Yapılandırma formatı ve desteklenen parametreler için [buraya](https://react-native.adapty.io/interfaces/adaptymockconfig) bakın. ```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); } ``` Aktivasyondan önce SDK metodlarını çağırmanız gerekiyorsa (örneğin `isActivated()` veya `setLogLevel()`), `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'); ``` ## 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, '15.0' ``` #### 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 `` etiketinin tools içerdiğinden emin olun: ```xml ... ``` #### 2. `` içinde yedekleme özelliklerini geçersiz kılın \{#2-override-backup-attributes-in-application\} Aynı `AndroidManifest.xml` dosyasında, `` 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 ... ``` 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" ``` **Android 11 ve altı için** (eski tam yedekleme içeriği formatını kullanır): ```xml title="sample_backup_rules.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 bir tarayıcıdan döndüğünde Android onu hatalı şekilde yeniden oluşturabilir veya yeniden kullanabilir. Bu, satın alma sonucunun kaybolmasına veya iptal edilmiş olarak değerlendirilmesine neden olabilir. Satın almaların doğru çalışmasını sağlamak için, satın alma akışını başlatan Activity için yalnızca `standard` veya `singleTop` launch mode'larını kullanın ve 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 ``` #### Podfile SWIFT_VERSION geçersiz kılmasının neden olduğu Swift 6 derleme hataları \{#swift-6-build-errors-caused-by-podfile-swift_version-override\} React Native uygulamanızı iOS için derlerken, Adapty pod hedeflerinde Swift 6 derleme hatalarıyla karşılaşabilirsiniz. Tipik belirtiler arasında `AdaptyUIBuilderLogic` içindeki `@Sendable` uyumsuzlukları, Adapty türlerinde eksik `Sendable` uyumu veya actor izolasyon hataları yer alır. Adapty pod'ları `s.swift_version = '6.0'` bildirir ve derlenmek için Swift 6 gerektirir. Kendi uygulama kodunuz Swift 5'te kalabilir — yalnızca Adapty pod hedeflerinin (`Adapty`, `AdaptyUI`, `AdaptyUIBuilder`, `AdaptyLogger`, `AdaptyPlugin`) Swift 6 ile derlenmesi gerekir. En yaygın neden, `ios/Podfile` içinde her pod hedefi için `SWIFT_VERSION`'ı yeniden yazan bir `post_install` kancasıdır: ```ruby showLineNumbers title="ios/Podfile" post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '5.9' end end end ``` **Düzeltme**: Adapty pod hedeflerini geçersiz kılmanın dışında bırakın: ```ruby showLineNumbers title="ios/Podfile" post_install do |installer| installer.pods_project.targets.each do |target| next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger AdaptyPlugin].include?(target.name) target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '5.9' end end end ``` Ardından `ios/` dizininden `pod install` komutunu çalıştırın ve yeniden derleyin. Doğrulamak için `ios/Pods/Pods.xcodeproj` dosyasını açın, `Adapty` pod hedefini seçin → **Build Settings** → **Swift Language Version**. Bu değer **Swift 6** olmalıdır. --- # File: react-native-quickstart-paywalls --- --- title: "React Native SDK'da Flow Builder ile satın almaları etkinleştirme" description: "Adapty Flow Builder ile uygulama içi satın almaları etkinleştirmeye yönelik hızlı başlangıç rehberi." --- Uygulama içi satın almaları etkinleştirmek için üç temel kavramı anlamanız gerekir: - [**Ürünler**](product) – kullanıcıların satın alabileceği her şey (abonelikler, consumable'lar, süresiz erişim) - [**Flow'lar**](adapty-flow-builder) – kullanıcılara ürünleri sunan, kod gerektirmeyen Flow Builder'da oluşturulan ekran dizileri. SDK bunları `getFlow` aracılığıyla getirir. Arayüzü kendi kodunuzda oluşturmayı tercih ederseniz, bunun yerine bir paywall kullanın — bkz. [Paywall'ları manuel olarak uygulama](react-native-quickstart-manual). - [**Placement'lar**](placements) – flow'ları uygulamanızda nerede ve ne zaman göstereceğiniz (`main`, `onboarding`, `settings` gibi). Flow'ları kontrol panelinde placement'lara bağlar, ardından kodunuzda placement ID'sine göre istersiniz. Bu, A/B testleri çalıştırmayı ve farklı kullanıcılara farklı flow'lar göstermeyi kolaylaştırır. Adapty, uygulamanızda satın almaları etkinleştirmek için üç farklı yöntem sunar. Uygulama gereksinimlerinize göre birini seçin: | Uygulama yöntemi | Karmaşıklık | Ne zaman kullanılır | |---|---|---| | Adapty Flow Builder | ✅ Kolay | [Kod gerektirmeyen builder'da eksiksiz, satın almaya hazır bir flow oluşturursunuz](quickstart-paywalls). Adapty bunu otomatik olarak render eder ve tüm karmaşık satın alma sürecini, makbuz doğrulamasını ve abonelik yönetimini arka planda halleder. | | Manuel olarak oluşturulan paywall'lar | 🟡 Orta | Paywall arayüzünüzü uygulama kodunuzda uygularsınız, ancak ürün tekliflerinde esnekliği korumak için flow nesnesini yine de Adapty'den alırsınız. Bkz. [rehber](react-native-quickstart-manual). | | Gözlemci modu | 🔴 Zor | Kendi satın alma yönetim altyapınız zaten var ve onu kullanmaya devam etmek istiyorsunuz. Gözlemci modunun Adapty'de bazı sınırlamaları olduğunu unutmayın. Bkz. [makale](observer-vs-full-mode). | :::important **Aşağıdaki adımlar, Adapty Flow Builder'da oluşturulan bir flow'un nasıl uygulanacağını gösterir.** Paywall arayüzünü kendiniz oluşturmayı tercih ederseniz, bkz. [Paywall'ları manuel olarak uygulama](react-native-quickstart-manual). ::: Adapty Flow Builder'da oluşturulan bir flow'u görüntülemek için uygulama kodunuzda yalnızca şunları yapmanız gerekir: 1. **Flow'u alın**: Onu Adapty'den alın. 2. **Görüntüleyin, satın almaları Adapty sizin için halleder**: View'i uygulamanızda gösterin. 3. **Buton eylemlerini yönetin**: Kullanıcı etkileşimlerini, uygulamanızın bunlara vereceği yanıtla ilişkilendirin. Örneğin, kullanıcılar butonlara tıkladığında bağlantıları açın veya flow'u kapatın. ## Başlamadan önce \{#before-you-start\} Başlamadan önce şu adımları tamamlayın: 1. Adapty Kontrol Paneli'nde uygulamanızı [App Store](initial_ios) ve/veya [Google Play](initial-android) ile bağlayın. 2. Adapty'de [ürünlerinizi oluşturun](create-product). 3. [Bir flow oluşturun ve ona ürünler ekleyin](create-paywall). 4. [Bir placement oluşturun ve flow'unuzu ona ekleyin](create-placement). 5. Uygulama kodunuzda [Adapty SDK'yı yükleyin ve etkinleştirin](sdk-installation-reactnative). Bu rehber Adapty React Native SDK v4 API'lerini kullanır. ## 1. Flow'u alın \{#1-get-the-flow\} Flow'larınız, kontrol panelinde yapılandırılan placement'larla ilişkilendirilir. Placement'lar, farklı kitleler için farklı flow'lar çalıştırmanıza veya [A/B testleri](ab-tests) çalıştırmanıza olanak tanır. Adapty Flow Builder'da oluşturulan bir flow'u almak için, `getFlow` metodunu kullanarak `flow` nesnesini [placement](placements) ID'siyle alın. Flow, onu görüntülemek için gereken arayüz öğelerini ve stilini içerir. ```typescript showLineNumbers title="React Native" try { const flow = await adapty.getFlow('YOUR_PLACEMENT_ID'); // the requested flow } catch (error) { // handle the error } ``` ## 2. Flow'u görüntüleyin \{#2-display-the-flow\} Artık flow'a sahip olduğunuzda, onu görüntülemek için birkaç satır eklemeniz yeterlidir. Bir flow'u mevcut bileşen ağacınıza gömmek için, `AdaptyFlowView` bileşenini doğrudan React Native bileşen hiyerarşinizde kullanın: ```typescript showLineNumbers title="React Native (TSX)" function MyFlow({ flow }) { const onPurchaseCompleted = useCallback( (result, product) => result.type !== 'user_cancelled', [], ); return ( ); } ``` Flow'u bağımsız bir ekran olarak görüntülemek için, `createFlowView` metoduyla bir `view` oluşturun, olay işleyicilerini ayarlayın, ardından `view.present()` çağırın. Her `view` yalnızca bir kez kullanılabilir. Flow'u tekrar görüntülemeniz gerekirse, yeni bir `view` örneği oluşturmak için `createFlowView`'u bir kez daha çağırın. ```typescript showLineNumbers title="React Native" try { const view = await createFlowView(flow); view.setEventHandlers({ onPurchaseCompleted(result, product) { return result.type !== 'user_cancelled'; }, }); await view.present(); } catch (error) { // handle the error } ``` :::tip Bir flow'u görüntüleme hakkında daha fazla ayrıntı için [rehberimize](react-native-present-paywalls) bakın. ::: ## 3. Buton eylemlerini yönetin \{#3-handle-button-actions\} Kullanıcılar flow'daki butonlara tıkladığında, React Native SDK satın almaları, geri yüklemeyi, flow'u kapatmayı ve URL açmayı otomatik olarak yönetir. Ancak diğer butonların özel veya önceden tanımlanmış ID'leri vardır ve kodunuzda eylem yönetimi gerektirir. Ya da varsayılan davranışlarını geçersiz kılmak isteyebilirsiniz. Örneğin, kapatma butonunun varsayılan davranışı aşağıdadır. Bunu kodda eklemeniz gerekmez, ancak gerekirse nasıl yapıldığını burada görebilirsiniz. React bileşeni için, eylemleri doğrudan `AdaptyFlowView` bileşeninde yönetin: ```typescript showLineNumbers title="React Native (TSX)" function MyFlow({ flow }) { const onCloseButtonPress = useCallback( () => true, // allow the flow to close [], ); const onCustomAction = useCallback( (actionId) => false, [], ); return ( ); } ``` Modal sunum için `setEventHandlers` kullanarak olay işleyicilerini uygulayın: ```typescript showLineNumbers title="React Native" const unsubscribe = view.setEventHandlers({ onCloseButtonPress() { return true; // allow the flow to close }, }); ``` :::tip Buton [aksiyonlarını](react-native-handle-paywall-actions) ve [olaylarını](react-native-handling-events-1) nasıl yöneteceğinizle ilgili kılavuzlarımızı okuyun. ::: ## Sonraki adımlar \{#next-steps\} :::tip Sorularınız mı var ya da sorunlarla mı karşılaşıyorsunuz? Sık sorulan soruların yanıtlarını bulabileceğiniz veya kendi sorularınızı sorabileceğiniz [destek forumumuza](https://adapty.featurebase.app/) göz atın. Ekibimiz ve topluluğumuz yardımcı olmak için burada! ::: Flow'unuz uygulamada görüntülenmeye hazır. Flow'dan bir test satın alması tamamlayabildiğinizden emin olmak için [satın almalarınızı test edin](react-native-test). Şimdi, doğru kullanıcılara bir flow gösterdiğinizden veya ücretli özelliklere erişim verdiğinizden emin olmak için [kullanıcıların access level'ını kontrol etmeniz](react-native-check-subscription-status) gerekir. ## Tam örnek \{#full-example\} Bu rehberdeki tüm adımların uygulamanızda birlikte nasıl entegre edilebileceği aşağıdadır. ```javascript showLineNumbers title="React Native (TSX)" export default function FlowScreen() { const [flow, setFlow] = useState(null); const loadFlow = async () => { try { const flowData = await adapty.getFlow('YOUR_PLACEMENT_ID'); setFlow(flowData); } catch (error) { console.warn('Error loading flow:', error); } }; const onCloseButtonPress = useCallback( () => true, [], ); const onPurchaseCompleted = useCallback( (result, product) => result.type !== 'user_cancelled', [], ); useEffect(() => { loadFlow(); }, []); return ( {flow ? ( ) : (