Adapty React Native SDK'yı v4.0'a Geçirme
Adapty React Native SDK 4.0, flow’ları tanıtır ve paywall API’lerini buna göre yeniden adlandırır. Yeni API’ler flow’larla çalışır ve eski builder’daki paywall’larla da çalışmaya devam eder — Adapty Kontrol Paneli tarafında herhangi bir kurulum değişikliği gerekmez.
Bu rehber 3.x → 4.0 geçişini kapsamaktadır. SDK 4.1, bunun üzerine birkaç API daha değiştirir — Adapty Attribution artık opt-in hale gelir, harici attribution metodları yeniden adlandırılır ve yedek dosya formatı tekrar değişir. Burayı tamamladıktan sonra v4.1’e geçiş bölümüne bakın.
Hızlı başvuru
| v3 | v4 |
|---|---|
adapty.getPaywall(placementId, locale?, params?) | adapty.getFlow(placementId, params?) |
adapty.getPaywallForDefaultAudience(placementId, locale?, params?) | adapty.getFlowForDefaultAudience(placementId, params?) |
adapty.getPaywallProducts(paywall) | adapty.getPaywallProducts(flow) |
adapty.logShowPaywall(paywall) | adapty.logShowFlow(flow) |
AdaptyPaywall (tür) | AdaptyFlow |
createPaywallView(paywall) | createFlowView(flow) |
AdaptyPaywallView (bileşen) | AdaptyFlowView |
EventHandlers (tür) | FlowEventHandlers |
onPaywallShown | onAppeared |
onPaywallClosed | onDisappeared |
onRenderingFailed | onError |
AdaptyPaywallProduct adını korur — ürünler hâlâ bir flow’a aittir ve getPaywallProducts artık bir AdaptyFlow alır. getFlow ve getFlowForDefaultAudience metodları artık locale parametresi almaz — bunun yerine createFlowView’e aktarın. present, dismiss, setEventHandlers ve showDialog görünüm metodları ile onCloseButtonPress, onUrlPress, onCustomAction, onProductSelected, onPurchaseStarted, onPurchaseCompleted, onPurchaseFailed, onRestoreStarted, onRestoreCompleted, onRestoreFailed, onLoadingProductsFailed, onWebPaymentNavigationFinished ve onAndroidSystemBack olay yöneticileri v3’tekiyle aynı adları korur. Bazı varsayılan davranışlar değişti — bkz. Varsayılan davranış değişiklikleri.
Minimum iOS sürümü
Adapty React Native SDK 4.0, minimum iOS dağıtım hedefini iOS 13.0’dan iOS 15.0’a yükseltir. Yükseltmeden önce iOS dağıtım hedefinizi 15.0 veya sonrasına ayarlayın.
Kurulum
Paketi güncelleyin
v4.0 bir ön sürümdür, bu yüzden tam sürümü sabitleyin — npm, caret/tilde aralıkları üzerinden ön sürümleri seçmez:
npm install react-native-adapty@4.0.2
# or
yarn add react-native-adapty@4.0.2
iOS: Yerel SDK’lar artık Swift Package Manager üzerinden geliyor
CocoaPods’un spec reposu Aralık 2026’da salt okunur hale gelecek, bu nedenle v4 itibarıyla Adapty, AdaptyUI ve AdaptyPlugin yerel SDK’ları artık CocoaPods alt bağımlılığı olarak çekilmiyor — podspec bunları Swift Package Manager aracılığıyla (spm_dependency yardımcısı üzerinden) alıyor. Bu durum üç şeyi gerektiriyor:
- Xcode 26 veya üzeri — iOS SDK’nın yerel paket bildirimi Swift araçları 6.2’yi tanımlar; eski Xcode sürümleri bunu okuyamaz.
- React Native 0.75 veya üzeri —
spm_dependencypodspec yardımcısı için gereklidir. Daha eski bir sürümdepod installaçık bir hatayla başarısız olur; önce React Native’i güncelleyin ya dareact-native-adapty3.x sürümünde kalın. - Dinamik framework’ler — SPM bağımlılıkları dinamik bağlamayı gerektirir. Bunu etkinleştirme yöntemi Expo ve bare React Native için farklılık gösterir.
Expo
expo-build-properties config eklentisini ekleyin ve app.json (veya app.config.js) dosyasında iOS framework’lerini dynamic olarak ayarlayın:
{
"expo": {
"plugins": [
[
"expo-build-properties",
{
"ios": {
"useFrameworks": "dynamic"
}
}
]
]
}
}
Ardından eklentiyi yükleyin ve native projeyi yeniden oluşturun:
npx expo install expo-build-properties
npx expo prebuild --clean
iOS build işlemi 'React/RCTBridge.h' file not found hatasıyla başarısız olursa, expo-modules-autolinking paketini 57.0.10 veya üzeri (Expo SDK 57) ya da 56.0.22 veya üzeri (Expo SDK 56) sürümüne güncelleyin — ayrıntılar ve geçici çözüm için sorun giderme bölümüne bakın.
Bare React Native
iOS hedefine dinamik framework’leri ekleyin, ardından pod’ları yeniden yükleyin:
use_frameworks! :linkage => :dynamic
cd ios && pod install --repo-update
Daha önce Adapty, AdaptyUI veya AdaptyPlugin’i CocoaPods alt bağımlılığı olarak eklediyseniz, önce Podfile’ınızdaki pod 'Adapty', pod 'AdaptyUI' veya pod 'AdaptyPlugin' satırlarını kaldırın.
Varsayılan statik bağlamadan dinamik framework’lere geçiş, modüler başlıkları henüz desteklemeyen kütüphanelerle çakışabilir ve Flipper ile uyumsuzdur. Derleme sorunlarıyla karşılaşırsanız, React Native kütüphanelerinde Swift Package Manager entegrasyonuna ilişkin bu yazıya bakın.
Adapty SDK’yı Yükle bağlantısına bakarak kurulumu tamamlayabilirsiniz.
Flow’ları getirme
getPaywall → getFlow
Döndürülen tür AdaptyPaywall yerine AdaptyFlow olarak değişir ve locale parametresi fetch çağrısından createFlowView’e taşınır; özel paywall’lar için tüm locale’ler flow.remoteConfigs içinde döndürülür:
- const paywall = await adapty.getPaywall('YOUR_PLACEMENT_ID', 'en');
+ const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');
+ const view = await createFlowView(flow, { locale: 'en' });
locale, createFlowView üzerinde isteğe bağlı olmaya devam eder: atlarsanız görünüm en dilinde render edilir ya da flow’un en yerelleştirmesi yoksa flow’un varsayılan yerelleştirmesinde render edilir. SDK 4.0.2 veya sonrası gerektirir — bkz. Yerelleştirmeler ve locale kodları.
getPaywallForDefaultAudience aynı şekilde yeniden adlandırılmıştır:
- const paywall = await adapty.getPaywallForDefaultAudience('YOUR_PLACEMENT_ID', 'en');
+ const flow = await adapty.getFlowForDefaultAudience('YOUR_PLACEMENT_ID');
getPaywallProducts(paywall) → getPaywallProducts(flow)
getPaywallProducts adını korur ancak artık bir AdaptyFlow alır:
- const products = await adapty.getPaywallProducts(paywall);
+ const products = await adapty.getPaywallProducts(flow);
Yedek dosyalar
Yedek dosya formatı SDK v4’te değişti. Yeni dosyayı Placements > Fallbacks bölümünden indirip uygulamanıza ekleyin.
Veri modeli
getFlow, AdaptyPaywall yerine bir AdaptyFlow döndürür ve nesne yapısı değişti:
v3 AdaptyPaywall alanı | v4 AdaptyFlow alanı | İşlem |
|---|---|---|
remoteConfig? (tek) | remoteConfigs?: AdaptyRemoteConfig[] (dizi) | Bir flow, yapılandırılmış her dil için bir remote config taşır. Kullanıcıya uyan olanı okuyun: flow.remoteConfigs?.find((c) => c.lang === 'en'). |
products | flow.paywalls[i].productIdentifiers | Ürün tanımlayıcıları artık flow üzerinde değil, her flow varyasyonunda yer alıyor. |
webPurchaseUrl? | flow.paywalls[i].webPurchaseUrl | Flow’dan her paywall varyasyonuna taşındı. |
version?: number | flowVersionId?: string | Yeniden adlandırıldı ve tür number’dan string’e değiştirildi. |
hasViewConfiguration | 4.0’da kaldırıldı, 4.1’de geri döndü | 4.0 sürümündeyken kodunuzdaki tüm hasViewConfiguration kontrollerini kaldırın. Bu işaret, 4.1’de AdaptyFlow’a geri dönüyor — bkz. v4.1’e Geçiş. |
requestLocale | kaldırıldı | Locale artık modelin bir parçası değil. |
| (yeni) | paywalls: AdaptyFlowPaywall[] | Her giriş, flow içindeki bir paywall varyasyonunu temsil eder. |
| (yeni) | responseCreatedAt: number | Sunucu yanıt zaman damgası, milisaniye cinsinden. |
Ürün tanımlayıcıları flow’dan her varyasyona taşındı:
- const ids = paywall.products;
+ const ids = flow.paywalls[0].productIdentifiers;
Web paywall metotları
openWebPaywall ve createWebPaywallUrl adlarını korur, ancak ilk argüman artık AdaptyPaywall yerine bir AdaptyFlowPaywall’dır (bir flow varyasyonu). Yine de bir AdaptyPaywallProduct geçirebilirsiniz.
const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');
- await adapty.openWebPaywall(paywall);
+ await adapty.openWebPaywall(flow.paywalls[0]);
Flow görüntülemelerini izleme
logShowPaywall → logShowFlow
logShowPaywall, logShowFlow olarak yeniden adlandırıldı ve artık bir AdaptyFlow alıyor. Olay yine aynı varyasyona karşı kaydedilir, bu nedenle mevcut huni ve A/B testi metrikleri kontrol panelinde herhangi bir değişiklik yapılmadan çalışmaya devam eder.
- await adapty.logShowPaywall(paywall);
+ await adapty.logShowFlow(flow);
v3’te olduğu gibi, Adapty tarafından render edilen flow’ları veya paywallları görüntülerken bu metodu çağırmanıza gerek yoktur — Adapty bu görüntülemeleri otomatik olarak takip eder.
Flow’ları görüntüleme
createPaywallView → createFlowView
Fabrika fonksiyonunu yeniden adlandırın ve AdaptyFlow’u geçirin. Dönen denetleyicinin metotları (present, dismiss, setEventHandlers, showDialog) değişmedi:
- import { createPaywallView } from 'react-native-adapty';
+ import { createFlowView } from 'react-native-adapty';
- const view = await createPaywallView(paywall);
+ const view = await createFlowView(flow);
await view.present();
AdaptyPaywallView → AdaptyFlowView
React bileşeniyle render ediyorsanız, bileşeni yeniden adlandırın ve flow prop’unu geçin:
- import { AdaptyPaywallView } from 'react-native-adapty';
+ import { AdaptyFlowView } from 'react-native-adapty';
- <AdaptyPaywallView paywall={paywall} /* … */ />
+ <AdaptyFlowView flow={flow} /* … */ />
createFlowView ile oluşturulan bir flow görünümü tek kullanımlıktır: dismiss() çağrıldıktan sonra görünüm yok edilir, bu nedenle flow’u tekrar göstermek için createFlowView’i yeniden çağırmanız gerekir. Gömülü bir AdaptyFlowView ise unmount edilerek kapatılır — bir handler’dan true döndürmek gömülü görünümü kapatmaz, bunun yerine kendi state’inizi değiştirmeniz gerekir; örneğin onCloseButtonPress içinde bunu yapabilirsiniz.
Olayları yönetme
Olay işleyici arayüzü EventHandlers’dan FlowEventHandlers’a yeniden adlandırıldı ve üç callback yeniden adlandırıldı. Mevcut işleyici gövdelerinde kod değişikliği gerekmez — yalnızca yeniden adlandırın:
- onPaywallShown: () => { /* … */ },
+ onAppeared: () => { /* … */ },
- onPaywallClosed: () => { /* … */ },
+ onDisappeared: () => { /* … */ },
- onRenderingFailed: (error) => { /* … */ },
+ onError: (error) => { /* … */ },
Diğer tüm olay işleyiciler isimlerini korur. İkisi ayrıca ikinci bir argüman kazanır: onPurchaseCompleted artık (purchaseResult, product) ve onPurchaseFailed artık (error, product) şeklindedir; burada product, ilgili AdaptyPaywallProduct’tır. Tam liste için bkz. Flow & paywall olaylarını yönetme.
onDisappeared yalnızca createFlowView().present() ile modal olarak sunulan bir flow için tetiklenir. AdaptyFlowView bileşeni bunu prop olarak sunmaz — gömülü bir görünümü kapatmak için bileşeni unmount edin.
v4 ayrıca isteğe bağlı olarak kullanabileceğiniz birkaç yeni özellik ekler:
adapty.openWebUrl(url, openIn?)veadapty.requestAppReview()metodları — bunlar varsayılanonUrlPressveonRequestAppReviewişleyicilerini destekler; böylece URL’ler ve uygulama değerlendirme istekleri kutudan çıktığı gibi yerel olarak işlenir. Bu işleyicileri geçersiz kılıyorsanız doğrudan çağırın.- Flow’lar içinde observer modunda satın alma işlemi için yeni
onObserverPurchaseInitiated/onObserverRestoreInitiatedişleyicileri. Bkz. Observer modunda satın almaları yönetme.
Kaldırılan ve kullanımdan kaldırılan API’ler
setFallbackPaywalls → setFallback
setFallbackPaywalls kaldırıldı. Aynı argümanı alan setFallback’i kullanın:
- await adapty.setFallbackPaywalls(fileLocation);
+ await adapty.setFallback(fileLocation);
Kaldırılan dışa aktarımlar
Bu semboller artık react-native-adapty’den dışa aktarılmıyor. İçe aktarımlarını kaldırın:
AdaptyPaywall: Bunun yerineAdaptyFlowkullanın.ProductReference:AdaptyProductIdentifierkullanın;flow.paywalls[i].productIdentifiers’tan okuyun.AdaptyPaywallBuilder: Kaldırıldı. Flow’lar ve paywall’lar yerel olarak render edilir.AdaptyAndroidSubscriptionUpdateParameters: İç içesubscriptionUpdateParamsyapısını kullanın (aşağıya bakın).
activate: lockMethodsUntilReady
lockMethodsUntilReady kaldırıldı ve bu davranış artık her zaman etkin. activate çağrınızdan kaldırın — bırakmanız durumunda artık derlenmez:
- await adapty.activate('PUBLIC_SDK_KEY', { lockMethodsUntilReady: true });
+ await adapty.activate('PUBLIC_SDK_KEY');
makePurchase: Android abonelik güncellemesi
Düz Android abonelik güncelleme yapısı kaldırıldı. oldSubVendorProductId ve prorationMode değerlerini iç içe bir subscriptionUpdateParams nesnesine taşıyın ve isOfferPersonalized’ı üst düzeyde tutun. Tam örnek için bkz. Satın alma işlemleri.
Android: güvenli alan dolguları
Android boolean kaynağı <bool name="adapty_paywall_enable_safe_area_paddings">…</bool> kaldırıldı. Bunu res/values/bools.xml’den silin ve güvenli alan dolgularını çalışma zamanında, flow view’i oluştururken enableSafeArea parametresiyle kontrol edin. Modal sunum için varsayılan olarak true, gömülü bileşen için false değerini alır.
Mock modu
SDK’yı mock modunda (Expo Go veya web önizlemesi) çalıştırıyorsanız, mock yapılandırma anahtarı paywalls’ı flows olarak yeniden adlandırın.
Varsayılan davranış değişiklikleri
Bu değişiklikler derleme hatası oluşturmaz; bu nedenle çalışma zamanında test edin:
onAndroidSystemBack: Varsayılan davranış, görünümü kapatmaktan açık tutmaya değişti. Önceki davranışı geri yüklemek için handler’dantruedöndürün.onPurchaseCompleted: Varsayılan davranış, görünümü kapatmaktan (kullanıcı satın almayı iptal etmedikçe) her zaman açık tutmaya değişti. Önceki davranışı geri yüklemek için handler’danpurchaseResult.type !== 'user_cancelled'döndürün.onRestoreCompleted: Varsayılan davranış, başarılı bir geri yüklemeden sonra görünümü kapatmaktan açık tutmaya değişti. Önceki davranışı geri yüklemek için handler’dantruedöndürün.onUrlPress: Varsayılan davranış artık URL’yi kontrol panelindeki uygulama içi veya harici tarayıcı ayarını dikkate alarak yerel katman üzerinden açıyor. URL’leri kendiniz açmak için handler’ı geçersiz kılın.
Onboarding API kullanımdan kaldırıldı
Eski onboarding API’si v4.0’da Flow & Paywall Builder lehine kullanımdan kaldırılmıştır. Hâlâ çalışmaktadır, ancak gelecekteki bir sürümde kaldırılacaktır; bu nedenle onboardinglarınızı Flow & Paywall Builder’a taşımayı planlayın.
Kullanımdan kaldırılan semboller: getOnboarding, getOnboardingForDefaultAudience, createOnboardingView ve AdaptyOnboardingView.