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ı referans
| 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 metotları artık locale parametresi almaz. present, dismiss, setEventHandlers ve showDialog view metotları ile onCloseButtonPress, onUrlPress, onCustomAction, onProductSelected, onPurchaseStarted, onPurchaseCompleted, onPurchaseFailed, onRestoreStarted, onRestoreCompleted, onRestoreFailed, onLoadingProductsFailed, onWebPaymentNavigationFinished ve onAndroidSystemBack olay işleyicileri v3’teki adlarını 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 [email protected]
# or
yarn add [email protected]
iOS: yerel SDK’lar artık Swift Package Manager üzerinden geliyor
CocoaPods’un spec deposu Aralık 2026’da salt okunur hâle geliyor, bu yüzden v4’ten itibaren yerel Adapty, AdaptyUI ve AdaptyPlugin SDK’ları artık CocoaPods alt bağımlılıkları olarak çekilmiyor — podspec bunları Swift Package Manager aracılığıyla (spm_dependency yardımcısıyla) çeker. Bunun için iki şey gerekir:
- React Native 0.75 veya sonrası —
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 yükseltin ya dareact-native-adapty3.x’te kalın. - Dinamik framework’ler — SPM bağımlılıkları dinamik bağlama gerektirir. Bunu etkinleştirme yönteminiz Expo ve bare React Native için farklıdır.
Expo
app.json (veya app.config.js) içinde expo-build-properties yapılandırma eklentisini ekleyin ve iOS framework’lerini dinamik olarak ayarlayın:
{
"expo": {
"plugins": [
[
"expo-build-properties",
{
"ios": {
"useFrameworks": "dynamic"
}
}
]
]
}
}
Ardından eklentiyi yükleyin ve yerel projeyi yeniden oluşturun:
npx expo install expo-build-properties
npx expo prebuild --clean
Bare React Native
iOS hedefinize dinamik framework’ler 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ıkları olarak çektiyseniz, önce Podfile’ınızdaki tüm açık pod 'Adapty', pod 'AdaptyUI' veya pod 'AdaptyPlugin' satırlarını kaldırın.
Varsayılan statik bağlamadan dinamik framework’lere geçmek, henüz modular headers desteklemeyen kütüphanelerle çakışabilir ve Flipper ile uyumlu değildir. Derleme sorunlarıyla karşılaşırsanız, Swift Package Manager’ı React Native kütüphaneleriyle entegre etme üzerine bu yazıya bakın.
Tam kurulum için bkz. Adapty SDK’yı yükleyin.
Flow’ları getirme
getPaywall → getFlow
Dönen tür AdaptyPaywall’dan AdaptyFlow’a değişir ve locale parametresi kaldırılır — bir flow’u render ettiğinizde locale otomatik olarak çözümlenir; ö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');
getPaywallForDefaultAudience de aynı şekilde yeniden adlandırılı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);
Veri modeli
getFlow, bir AdaptyPaywall yerine bir AdaptyFlow döndürür ve nesnenin yapısı değişti:
v3 AdaptyPaywall alanı | v4 AdaptyFlow alanı | Eylem |
|---|---|---|
remoteConfig? (tekli) | remoteConfigs?: AdaptyRemoteConfig[] (dizi) | Bir flow, yapılandırılmış her dil için bir remote config taşır. Kullanıcıya uyanı okuyun: flow.remoteConfigs?.find((c) => c.lang === 'en'). |
products | flow.paywalls[i].productIdentifiers | Ürün tanımlayıcıları artık flow’un kendisinde değil, her flow varyasyonunda bulunur. |
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şti. |
hasViewConfiguration | kaldırıldı | Kodunuzdaki tüm hasViewConfiguration kontrollerini kaldırın. |
requestLocale | kaldırıldı | Locale 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ının 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, adını değiştirin ve flow prop’unu geçirin:
- import { AdaptyPaywallView } from 'react-native-adapty';
+ import { AdaptyFlowView } from 'react-native-adapty';
- <AdaptyPaywallView paywall={paywall} /* … */ />
+ <AdaptyFlowView flow={flow} /* … */ />
createFlowView ile oluşturulan bir flow view tek kullanımlıktır: dismiss() çağrısından sonra view yok edilir, dolayısıyla flow’u yeniden sunmak için createFlowView’u tekrar çağırın. Gömülü bir AdaptyFlowView, unmount edilerek kapatılır — bir işleyiciden true döndürmek gömülü bir view’i kapatmaz, bunun yerine kendi durumunuzu değiştirin; örneğin onCloseButtonPress içinde.
Olayları yönetme
Olay işleyici arayüzü EventHandlers’tan FlowEventHandlers’a yeniden adlandırıldı ve üç callback de 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şleyicileri adlarını korur. İkisi de ikinci bir argüman kazanır: onPurchaseCompleted artık (purchaseResult, product), onPurchaseFailed ise artık (error, product) şeklindedir; burada product, ilgili AdaptyPaywallProduct’tır. Tam liste için bkz. Flow ve paywall olaylarını yönetme.
onDisappeared yalnızca createFlowView().present() ile modal olarak sunulan bir flow için tetiklenir. AdaptyFlowView bileşeni bunu bir prop olarak sunmaz — gömülü bir view’i unmount ederek kapatın.
v4 ayrıca isteğe bağlı olarak kullanabileceğiniz birkaç özellik daha ekler:
adapty.openWebUrl(url, openIn?)veadapty.requestAppReview()metotları — bunlar varsayılanonUrlPressveonRequestAppReviewişleyicilerinin arkasındaki metotlardır; böylece URL’ler ve uygulama değerlendirme istemleri hazır şekilde yerel olarak işlenir. Bunları yalnızca söz konusu işleyicileri geçersiz kılıyorsanız doğrudan çağırın.- Yeni
onObserverPurchaseInitiated/onObserverRestoreInitiatedişleyicileri aracılığıyla flow’lar içinde gözlemci modu satın alma yönetimi. Bkz. Gözlemci 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 hatalarına yol açmaz, bu yüzden onları çalışma zamanında test edin:
onAndroidSystemBack: Varsayılan davranış, view’i kapatmaktan onu açık tutmaya değişti. Önceki davranışı geri getirmek için işleyicidentruedöndürün.onPurchaseCompleted: Varsayılan davranış, view’i kapatmaktan (kullanıcı satın almayı iptal etmediği sürece) her zaman açık tutmaya değişti. Önceki davranışı geri getirmek için işleyicidenpurchaseResult.type !== 'user_cancelled'döndürün.onRestoreCompleted: Varsayılan davranış, başarılı bir geri yükleme sonrasında view’i kapatmaktan onu açık tutmaya değişti. Önceki davranışı geri getirmek için işleyicidentruedöndürün.onUrlPress: Varsayılan davranış artık URL’yi yerel katman aracılığıyla açar ve kontrol panelindeki uygulama içi veya harici tarayıcı ayarına uyar. URL’leri kendiniz açmak için işleyiciyi 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.