Adapty SDK'yı saf bir React Native projesine yükleyin ve yapılandırın
Bu kılavuz yalnızca saf React Native (Expo olmayan) projeleri için geçerlidir. Expo kullanıyorsanız, Expo kurulum kılavuzunu 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ı kolayca oluşturmak için kullanabileceğiniz kullanıcı dostu, kodsuz bir araç olan Adapty Paywall Builder’ı kullanıyorsanız gereklidir. AdaptyUI, core modülle birlikte otomatik olarak etkinleştirilir.
Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall göstermeyi, satın alma işlemlerini ve diğer temel işlevleri kapsayan örnek uygulamalarımıza göz atın.
Gereksinimler
Adapty React Native SDK, iOS 13.0+ sürümünü destekler; ancak Adapty paywall builder ile oluşturulan paywall’ları kullanmak için iOS 15.0+ gereklidir.
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.
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 tüm gerekli adımları anlatmaktadır.
Adapty SDK’yı Yükleyin
- Adapty SDK’yı yükleyin (bu işlem
@adapty/corepaketini de otomatik olarak yükler):# using npm npm install react-native-adapty # or using yarn yarn add react-native-adapty - iOS için pod’ları yükleyin:
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 veya daha yeni bir bağımlılığın mevcut olduğundan emin olun:
...
buildscript {
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
...Adapty SDK’nın Adapty modülünü etkinleştirin
Public SDK Key’inizi almak için:
- Adapty Kontrol Paneli’ne gidin ve App settings → General sayfasına geçin.
- Api keys bölümünden Public SDK Key’i kopyalayın (Secret Key’i değil).
- Koddaki
"YOUR_PUBLIC_SDK_KEY"ifadesini bununla değiştirin.
- Adapty’yi başlatırken Public SDK key kullandığınızdan emin olun; Secret key yalnızca sunucu tarafı 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:
adapty.activate('YOUR_PUBLIC_SDK_KEY');
Diğer Adapty SDK metodlarını çağırmadan önce activate işleminin tamamlanmasını bekleyin. Tam sıra için React Native SDK’da çağrı sırası sayfasına bakın.
Şimdi uygulamanızda paywall’ları ayarlayın:
- Adapty Paywall Builder kullanıyorsanız, Paywall Builder hızlı başlangıç kılavuzunu takip edin.
- Kendi paywall arayüzünüzü oluşturuyorsanız, özel paywaller için hızlı başlangıç kılavuzuna bakın.
Geliştirme ortamındaki aktivasyon hatalarını önlemek için ipuçlarını kullanın.
Adapty SDK’nın AdaptyUI modülünü etkinleştirin
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
Loglama
Loglama sistemini ayarlayın
Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri loglar. Aşağıdaki seviyeleri kullanabilirsiniz:
| Seviye | Açıklama |
|---|---|
error | Yalnızca hatalar loglanır |
warn | Hatalar ve SDK’dan gelen kritik hata oluşturmayan ancak dikkat edilmesi gereken 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 |
| Adapty yapılandırmasından önce veya yapılandırma sırasında uygulamanızda log seviyesini ayarlayabilirsiniz: |
// 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ı
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
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 yönetmeliklerine (GDPR veya CCPA gibi) uymak ya da IP tabanlı özelliklere ihtiyaç duymayan uygulamalarda gereksiz veri toplamayı azaltmak için bu parametreyi kullanın.
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ipAddressCollectionDisabled: true,
});
Reklam kimliği toplama ve paylaşımını devre dışı bırakma
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, App Tracking Transparency istemini tetiklemekten kaçınmak ya da uygulamanız reklam attribution veya reklam kimliklerine dayalı analitik gerektirmiyorsa bu parametreyi kullanın.
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ios: {
idfaCollectionDisabled: true,
},
android: {
adIdCollectionDisabled: true,
},
});
AdaptyUI için medya önbellek yapılandırmasını ayarlama
AdaptyUI, varsayılan olarak performansı artırmak ve ağ kullanımını azaltmak amacıyla medya (resim ve videolar gibi) önbellekler. Ö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:
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 depolama alanındaki öğ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)
Varsayılan olarak yerel access level’lar iOS’ta etkin, Android’de devre dışıdır. Android’de de etkinleştirmek için localAccessLevelAllowed değerini true olarak ayarlayın:
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
android: {
localAccessLevelAllowed: true,
},
});
Yedekleme geri yüklemede verileri temizleyin
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.
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.
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ios: {
clearDataOnBackup: true
},
});
Geliştirme ortamı ipuçları
SDK aktivasyonunu geliştirme amacıyla geciktirme
Adapty, SDK aktivasyonunda gerekli tüm kullanıcı verilerini önceden yükleyerek güncel verilere 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 activate çağrısı bekletilir. Bu, gerekli olmadığında kimlik doğrulama verileri için gereksiz istemlerden kaçınmanızı sağlar.
Bu özelliğin yalnızca geliştirme amaçlı kullanılmak üzere tasarlandığını belirtmek önemlidir; çünkü tüm olası kullanıcı senaryolarını kapsamaz. Üretim ortamında aktivasyon geciktirilmemelidir; gerçek cihazlar genellikle kimlik doğrulama verilerini hatırlar ve kimlik bilgileri için tekrar tekrar istemde bulunmaz.
Kullanım için önerilen yaklaşım şu şekildedir:
try {
adapty.activate('PUBLIC_SDK_KEY', {
__debugDeferActivation: isSimulator(), // 'isSimulator' herhangi bir 3. taraf kütüphaneden
});
} catch (error) {
console.error('Adapty SDK etkinleştirilemedi:', error);
// Uygulamanız için hatayı uygun şekilde işleyin
}
React Native’in Fast Refresh özelliğinde SDK etkinleştirme hatalarını giderme
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 durum, React Native’in hızlı yenileme (fast refresh) özelliğinin geliştirme sırasında birden fazla aktivasyon çağrısı tetiklemesinden kaynaklanır. Bunu önlemek için __ignoreActivationOnFastRefresh seçeneğini __DEV__ (React Native’in geliştirme modu bayrağı) olarak ayarlayın.
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 ayarlama
Yerel geliştirme ve test için, sandbox App Store/Google Play hesaplarına ihtiyaç duymadan mock mod etkinleştirebilir ve iterasyon sürecinizi hızlandırabilirsiniz. Mock mod, Adapty’nin native modüllerini tamamen devre dışı bırakır ve simüle edilmiş veriler döndürür.
Mock mod, 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 build’inde eksik yerel SDK dosyaları veya geçersiz bir API anahtarı bile 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:
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
enableMock: true,
});
Mock modu etkinken:
- Tüm Adapty metodları, Adapty sunucularına ağ isteği göndermeden sahte veri 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 bakın.
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);
}
Aktivasyondan önce SDK metodlarını ç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.
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
Minimum iOS sürüm hatası
Minimum iOS sürüm hatası alırsanız Podfile’ınızı güncelleyin:
-platform :ios, min_ios_version_supported
+platform :ios, '13.0' # For core features only
# OR
+platform :ios, '15.0' # If using paywalls created in the paywall builder
Android Auto Backup manifest çakışması
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)
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
AndroidManifest.xml dosyanızda, kök <manifest> etiketinin tools içerdiğinden emin olun:
<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
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:
<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:
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
3. Birleştirilmiş yedekleme kuralı dosyaları oluşturun
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.
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 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 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 geri döndükten sonra satın almalar başarısız oluyor
Satın alma akışını başlatan Activity’nin varsayılan olmayan bir launchMode kullanması durumunda, kullanıcı Google Play’den, bir bankacılık uygulamasından veya tarayıcıdan geri döndüğünde Android bu Activity’yi yanlış şekilde yeniden oluşturabilir veya yeniden kullanabilir. Bu durum, satın alma sonucunun kaybolmasına ya da iptal edilmiş gibi işlenmesine neden olabilir.
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 launch mode 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:
<activity
android:name=".MainActivity"
android:launchMode="standard" />
Podfile SWIFT_VERSION geçersiz kılmasından kaynaklanan Swift 6 derleme hataları
React Native uygulamanızı iOS için derlerken Adapty pod hedeflerinde Swift 6 derleme hataları görebilirsiniz. Tipik belirtiler arasında AdaptyUIBuilderLogic içinde @Sendable uyumsuzlukları, Adapty türlerinde eksik Sendable uyumu veya aktör izolasyonu hataları yer alır.
Adapty pod’ları s.swift_version = '6.0' olarak tanımlanmıştır ve derleme 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 dosyasındaki her pod hedefi için SWIFT_VERSION değerini yeniden yazan bir post_install kancasıdır:
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ılma işleminin dışında tutun:
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. Burada Swift 6 yazması gerekir.