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

v3v4
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
onPaywallShownonAppeared
onPaywallClosedonDisappeared
onRenderingFailedonError
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_dependency podspec yardımcısı için gereklidir. Daha eski bir sürümde pod install açık bir hata ile başarısız olur; önce React Native’i güncelleyin ya da react-native-adapty 3.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').
productsflow.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].webPurchaseUrlFlow’dan her paywall varyasyonuna taşındı.
version?: numberflowVersionId?: stringYeniden adlandırıldı ve tür number’dan string’e değiştirildi.
hasViewConfigurationkaldırıldıKodunuzdaki tüm hasViewConfiguration kontrollerini kaldırın.
requestLocalekaldırıldıDil artık modelin bir parçası değil.
(yeni)paywalls: AdaptyFlowPaywall[]Her giriş, flow içindeki bir paywall varyasyonudur.
(yeni)responseCreatedAt: numberSunucu 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?) ve adapty.requestAppReview() metodları — bunlar varsayılan onUrlPress ve onRequestAppReview iş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 / onObserverRestoreInitiated iş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 yerine AdaptyFlow kullanın.
  • ProductReference: AdaptyProductIdentifier kullanın; flow.paywalls[i].productIdentifiers’tan okuyun.
  • AdaptyPaywallBuilder: Kaldırıldı. Flow’lar ve paywall’lar yerel olarak render edilir.
  • AdaptyAndroidSubscriptionUpdateParameters: İç içe subscriptionUpdateParams yapı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’dan true dö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’dan purchaseResult.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’dan true dö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.