Adapty React Native SDK'yı v. 4.0'a geçirme
Adapty React Native SDK 4.0 (beta), flow’ları tanıtır ve paywall API’lerini buna göre yeniden adlandırır. Yeni API’ler hem yeni Flow Builder hem de mevcut Paywall Builder ile çalışır — Adapty Kontrol Paneli tarafında herhangi bir kurulum değişikliği gerekmez.
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. present, dismiss, setEventHandlers ve showDialog view metodları ile onCloseButtonPress, onUrlPress, onCustomAction, onProductSelected, onPurchaseStarted, onPurchaseCompleted, onPurchaseFailed, onRestoreStarted, onRestoreCompleted, onRestoreFailed, onLoadingProductsFailed, onWebPaymentNavigationFinished ve onAndroidSystemBack olay işleyicileri v3 ile 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.0
# or
yarn add react-native-adapty@4.0.0
iOS: Yerel SDK’lar artık Swift Package Manager üzerinden geliyor
CocoaPods’un spec deposu Aralık 2026’da salt okunur hale geliyor, bu nedenle v4 itibarıyla yerel Adapty, AdaptyUI ve AdaptyPlugin SDK’ları artık CocoaPods alt bağımlılığı olarak çekilmiyor — podspec bunları Swift Package Manager üzerinden çekiyor (spm_dependency yardımcısı aracılığıyla). Bunun için iki şey gerekiyor:
- React Native 0.75 veya üstü —
spm_dependencypodspec yardımcısı için gereklidir. Daha eski bir sürümdepod installaçık bir hata ile 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ğlantı gerektirir. Bunu nasıl etkinleştireceğiniz Expo ve bare React Native için farklıdır.
Expo
expo-build-properties config plugin’ini ekleyin ve app.json (veya app.config.js) dosyasında iOS framework’lerini dinamik 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
Bare React Native
iOS hedefinize 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 çektiyseniz, önce Podfile dosyanızdaki açık 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 uyumsuz olabilir. Derleme sorunlarıyla karşılaşırsanız, şu kaynağa bakın: Swift Package Manager’ı React Native kütüphaneleriyle entegre etme.
Tam kurulum için Adapty SDK’yı Yükle sayfasına bakın.
Flow’ları getirme
getPaywall → getFlow
Döndürülen tür AdaptyPaywall’dan AdaptyFlow’a değişiyor ve locale parametresi kaldırılıyor — bir flow render ederken locale otomatik olarak belirlenir; özel paywalllar için tüm locale’ler flow.remoteConfigs içinde döner:
- const paywall = await adapty.getPaywall('YOUR_PLACEMENT_ID', 'en');
+ const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');
getPaywallForDefaultAudience da aynı şekilde yeniden adlandırıldı:
- 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);
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ıyla eşleşeni okuyun: flow.remoteConfigs?.find((c) => c.lang === 'en'). |
products | flow.paywalls[i].productIdentifiers | Ürün tanımlayıcıları artık flow’da değil, her flow varyasyonunda yer alır. |
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 | kaldırıldı | Kodunuzdaki tüm hasViewConfiguration kontrollerini kaldırın. |
requestLocale | kaldırıldı | Dil artık modelin bir parçası değil. |
| (yeni) | paywalls: AdaptyFlowPaywall[] | Her giriş, flow içindeki bir paywall varyasyonudur. |
| (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ır. Olay hâlâ aynı varyasyona kaydedilir, dolayısıyla mevcut huni ve A/B testi metrikleri kontrol paneli değişiklikleri olmadan çalışmaya devam eder.
- await adapty.logShowPaywall(paywall);
+ await adapty.logShowFlow(flow);
v3’te olduğu gibi, Flow Builder veya Paywall Builder tarafından render edilen flow’ları ya da paywall’ları görüntülerken bu metodu çağırmanız gerekmez — Adapty bu görüntülemeleri otomatik olarak izler.
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’sinin kullanımdan kaldırılması
Eski onboarding API’si, v4.0’da Flow Builder lehine kullanımdan kaldırıldı. Hâlâ çalışıyor ve IDE’niz kullanımdan kaldırılan sembolleri @deprecated ek açıklamaları aracılığıyla işaretler — çalışma zamanı uyarısı yoktur. Bu semboller gelecekteki bir sürümde kaldırılacak, bu yüzden onboarding’lerinizi Flow Builder’a taşımayı planlayın.
Kullanımdan kaldırılan semboller: getOnboarding, getOnboardingForDefaultAudience, createOnboardingView ve AdaptyOnboardingView.