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

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 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_dependency podspec yardımcısı için gereklidir. Daha eski bir sürümde pod install açık bir hatayla başarısız olur; önce React Native’i yükseltin ya da react-native-adapty 3.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').
productsflow.paywalls[i].productIdentifiersÜrün tanımlayıcıları artık flow’un kendisinde değil, her flow varyasyonunda bulunur.
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şti.
hasViewConfigurationkaldırıldıKodunuzdaki tüm hasViewConfiguration kontrollerini kaldırın.
requestLocalekaldırıldıLocale artık modelin bir parçası değil.
(yeni)paywalls: AdaptyFlowPaywall[]Her giriş, flow içindeki bir paywall varyasyonudur.
(yeni)responseCreatedAt: numberSunucu 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?) ve adapty.requestAppReview() metotları — bunlar varsayılan onUrlPress ve onRequestAppReview iş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 / onObserverRestoreInitiated iş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 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 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şleyiciden true dö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şleyiciden purchaseResult.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şleyiciden true dö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.