Adapty Capacitor SDK'yı v. 4.0'a Geçirme

Adapty Capacitor 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 + AdaptyFlowPaywall
createPaywallView(paywall, params?)createFlowView(flow, params?)
PaywallViewControllerFlowViewController
EventHandlers (tür)FlowEventHandlers
CreatePaywallViewParamsInputCreateFlowViewParamsInput
onRenderingFailedonError
AdaptyPaywallProduct adını korur — ürünler hâlâ bir flow’a ait olmaya devam eder ve getPaywallProducts de adını korur, artık bir AdaptyFlow alır. getFlow ve getFlowForDefaultAudience metodları artık locale parametresi almaz. Satın alma ve profil API’leri (makePurchase, restorePurchases, getProfile, identify, updateProfile) ve setFallback aracılığıyla yedekler değişmeden kalır. present, dismiss, setEventHandlers ve showDialog gibi görünüm metodları ile onCloseButtonPress, onUrlPress, onCustomAction, onProductSelected, onPurchaseStarted, onPurchaseCompleted, onPurchaseFailed, onRestoreStarted, onRestoreCompleted, onRestoreFailed, onLoadingProductsFailed, onWebPaymentNavigationFinished ve onAndroidSystemBack olay işleyicileri v3’tekiyle aynı adları korur. Onboarding metodları çalışmaya devam eder ancak kullanımdan kaldırılmıştır — bkz. Onboarding API kullanımdan kaldırma. Bazı varsayılan davranışlar değişti — bkz. Varsayılan davranış değişiklikleri.

Minimum versions

Çalışma zamanı gereksinimleri v3.16+‘dan bu yana değişmedi: iOS 15.0, Android minSdk 24 ve Capacitor 8. Deployment target ayarlarında herhangi bir değişiklik gerekmez.

Bir yeni derleme gereksinimi var: Xcode 26 veya üzeri — bu sürümle birlikte gelen yerel Adapty iOS SDK 4.0.0-beta.2, Swift tools 6.2 kullanıyor.

v4, yerel Adapty SDK’larından iOS 4.0.0-beta.2 ve Android BOM 4.0.0-beta.1’i içeriyor.

Kurulum

Paketi güncelleyin

v4.0 bir ön sürüm olduğundan, tam sürümü sabitleyin — npm, şapka/tilde aralıklarıyla ön sürüm sürümlerini seçmez:

npm install @adapty/capacitor@4.0.0-beta.1

Ardından yerel projeleri senkronize edin:

npx cap sync

iOS: Yalnızca Swift Package Manager

CocoaPods’ın spec repo’su Aralık 2026’da salt okunur hale geliyor; bu nedenle v4 itibarıyla AdaptyCapacitor.podspec kaldırılmıştır ve SDK, iOS’ta yalnızca Swift Package Manager (SPM) üzerinden kurulmaktadır. Uygulamanızın iOS projesinin Capacitor’ın SPM entegrasyonunu kullanması gerekir:

  • Yeni uygulamalar için iOS platformunu SPM paket yöneticisiyle ekleyin:
npx cap add ios --packagemanager SPM

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 seçeneği kaldırılıyor — bir flow render ettiğinizde locale otomatik olarak çözümlenir; özel paywalllar için tüm locale’ler flow.remoteConfigs içinde döndürülür:

- const paywall = await adapty.getPaywall({ placementId: 'YOUR_PLACEMENT_ID', locale: 'en' });
+ const flow = await adapty.getFlow({ placementId: 'YOUR_PLACEMENT_ID' });

getPaywallForDefaultAudience de aynı şekilde yeniden adlandırılıyor:

- const paywall = await adapty.getPaywallForDefaultAudience({ placementId: 'YOUR_PLACEMENT_ID', locale: 'en' });
+ const flow = await adapty.getFlowForDefaultAudience({ placementId: '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? (tekil)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 üzerinde 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şti.
hasViewConfigurationkaldırıldıhasViewConfiguration kontrolünü kodunuzdan kaldırın — createFlowView artık bunun yerine hata fırlatır (bkz. Flow’ları görüntüleme).
requestLocalekaldırıldıLocale artık modelin bir parçası değildir.
(yeni)paywalls: AdaptyFlowPaywall[]Her giriş, flow’daki bir paywall varyasyonudur.
(yeni)responseCreatedAt: numberSunucu yanıt zaman damgası, milisaniye cinsinden.
hasViewConfiguration ve requestLocale, AdaptyOnboarding üzerinde kalmaya devam eder — yalnızca flow modeli bunları kaldırır.

Ürün tanımlayıcıları flow’dan her varyasyona taşındı:

- const ids = paywall.products;
+ const ids = flow.paywalls[0].productIdentifiers;

Web paywall yöntemleri

openWebPaywall ve createWebPaywallUrl adlarını korur, ancak paywallOrProduct seçeneği artık AdaptyPaywall yerine AdaptyFlowPaywall (bir flow varyasyonu) alır. Yine de AdaptyPaywallProduct geçirebilirsiniz. İlk girişi okumadan önce flow.paywalls öğesinin boş olmadığını kontrol edin:

  const flow = await adapty.getFlow({ placementId: 'YOUR_PLACEMENT_ID' });
- await adapty.openWebPaywall({ paywallOrProduct: paywall });
+ await adapty.openWebPaywall({ paywallOrProduct: flow.paywalls[0] });

Flow görüntülemelerini takip etme

logShowPaywall → logShowFlow

logShowPaywall, logShowFlow olarak yeniden adlandırıldı ve artık bir AdaptyFlow alıyor. Olay hâlâ aynı varyasyon üzerinden kaydedildiği için mevcut dönüşüm hunisi 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, Flow Builder veya Paywall Builder tarafından oluşturulan flow’ları ya da 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

Factory fonksiyonunu yeniden adlandırın ve AdaptyFlow’u geçirin. Döndürülen controller, PaywallViewController’dan FlowViewController’a yeniden adlandırıldı; ancak metodları (present, dismiss, setEventHandlers, showDialog) değişmedi. Params tipi CreatePaywallViewParamsInput’tan CreateFlowViewParamsInput’a yeniden adlandırıldı:

- import { createPaywallView } from '@adapty/capacitor';
+ import { createFlowView } from '@adapty/capacitor';

- const view = await createPaywallView(paywall);
+ const view = await createFlowView(flow);
  await view.present();

createFlowView, flow için yapılandırılmış bir view yoksa AdaptyError fırlatır — bu, v3’teki hasViewConfiguration kontrolünün yerini alır:

- if (paywall.hasViewConfiguration) {
-   const view = await createPaywallView(paywall);
-   await view.present();
- }
+ try {
+   const view = await createFlowView(flow);
+   await view.present();
+ } catch (error) {
+   // the flow has no view configured, or view creation failed
+ }

Bir flow view tek kullanımlıktır: dismiss() çağırdıktan sonra view yok edilir ve olay işleyicileri temizlenir; flow’u tekrar göstermek için createFlowView’ı yeniden çağırmanız gerekir.

Android güvenli alan dolguları

CreateFlowViewParamsInput, çalışma zamanında Android güvenli alan dolgularını kontrol eden yeni bir enableSafeArea parametresi ekler. Bu parametre, android anahtarı altında yer alır ve varsayılan değeri true’dur:

const view = await createFlowView(flow, {
  android: { enableSafeArea: true },
});

Olayları yönetme

Olay işleyici arayüzü EventHandlers yerine FlowEventHandlers olarak yeniden adlandırıldı ve bir callback yeniden adlandırıldı. Mevcut işleyici gövdelerinde kod değişikliği gerekmez — sadece yeniden adlandırın:

- onRenderingFailed: (error) => { /* … */ },
+ onError: (error) => { /* … */ },

Diğer tüm event handler’lar isimlerini korur. İki tanesi ayrıca ikinci bir argüman kazanır: onPurchaseCompleted artık (purchaseResult, product) ve onPurchaseFailed artık (error, product) şeklindedir; burada product, işleme dahil olan AdaptyPaywallProduct’tır. Tam liste için Flow ve paywall event’lerini yönetme sayfasına bakın.

v4 ayrıca isteğe bağlı olarak etkinleştirebileceğiniz birkaç yeni özellik ekler:

  • adapty.openWebUrl({ url, openIn }) ve adapty.requestAppReview() metodları — bunlar varsayılan onUrlPress ve onRequestAppReview işleyicilerini destekler; bu sayede URL’ler ve uygulama değerlendirme istemleri kutudan çıkar çıkmaz yerel olarak yönetilir. Bu işleyicileri geçersiz kıldığınızda doğrudan çağırın.
  • Flow’lar içinde Observer modu satın alma yönetimi, yeni onObserverPurchaseInitiated / onObserverRestoreInitiated işleyicileri aracılığıyla yapılır. Bkz. Flow’ları Observer modunda sunma.

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ış, satın alma iptal edilmediği sürece görünümü kapatmaktan 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üklemenin ardından 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 artık URL’yi yerel katman aracılığıyla açıyor; kontrol panelindeki uygulama içi veya harici tarayıcı ayarına göre davranıyor. URL’leri kendiniz açmak için handler’ı geçersiz kılın.
  • Görünümler tek kullanımlıktır: dismiss() çağrıldıktan sonra görünüm yok edilir. Flow’u tekrar göstermek için createFlowView’ı yeniden çağırın.

Kaldırılan API’ler

Kaldırılan exportlar

Bu semboller artık @adapty/capacitor’dan export edilmiyor. İlgili importları kaldırın:

  • AdaptyPaywall: Bunun yerine AdaptyFlow ve AdaptyFlowPaywall kullanın.
  • ProductReference: Bunun yerine AdaptyProductIdentifier kullanın; flow.paywalls[i].productIdentifiers üzerinden okuyun.
  • AdaptyPaywallBuilder: Kaldırıldı. Flow’lar ve paywall’lar artık native olarak render edilir.
  • AdaptyAndroidSubscriptionUpdateParameters: İç içe geçmiş android satın alma parametre yapısını kullanın (aşağıya bakın).

activate: lockMethodsUntilReady

lockMethodsUntilReady (v3’te zaten kullanımdan kaldırılmış ve işlevsiz hale getirilmişti) kaldırıldı. activate çağrınızdan bu parametreyi kaldırın — aksi hâlde artık derlenmez:

- await adapty.activate({ apiKey: 'PUBLIC_SDK_KEY', params: { lockMethodsUntilReady: true } });
+ await adapty.activate({ apiKey: 'PUBLIC_SDK_KEY' });

makePurchase: Android parametreleri

MakePurchaseParamsInput’ın kullanımdan kaldırılmış düz Android yapısı kaldırıldı — yalnızca iç içe geçmiş form geçerlidir. Android satın alma parametrelerini params: { android: { ... } } içine taşıyın. Tam örnek için Satın alma yapma sayfasına bakın.

Onboarding API kullanımdan kaldırılması

Eski onboarding API’si v4.0’da Flow Builder lehine kullanımdan kaldırıldı. Hâlâ çalışmaya devam etmektedir, ancak gelecekteki bir sürümde kaldırılacaktır; bu nedenle onboarding’lerinizi Flow Builder’a taşımayı planlayın.

Kullanımdan kaldırılan semboller: getOnboarding, getOnboardingForDefaultAudience, createOnboardingView ve OnboardingViewController.