Adapty Android SDK'yı v. 4.0'a Geçirme
Adapty Android SDK 4.0, 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) | Adapty.getFlow(placementId) |
Adapty.getPaywallForDefaultAudience(placementId, locale) | Adapty.getFlowForDefaultAudience(placementId) |
AdaptyUI.getViewConfiguration(paywall) | AdaptyUI.getFlowConfiguration(flow, locale) |
AdaptyUI.LocalizedViewConfiguration | AdaptyUI.FlowConfiguration |
Adapty.getPaywallProducts(paywall) | Adapty.getPaywallProducts(flow) |
Adapty.logShowPaywall(paywall) | Adapty.logShowFlow(flow) |
AdaptyPaywall | AdaptyFlow |
AdaptyUI.getPaywallView(...) | AdaptyUI.getFlowView(...) |
AdaptyPaywallView | AdaptyFlowView |
AdaptyPaywallScreen (Compose) | AdaptyFlowScreen |
showPaywall(...) | showFlow(...) |
AdaptyPaywallInsets | AdaptyFlowInsets |
AdaptyUiEventListener | AdaptyFlowEventListener |
AdaptyUiDefaultEventListener | AdaptyFlowDefaultEventListener |
onPaywallShown / onPaywallClosed | onFlowShown / onFlowClosed |
onRenderingError | onError |
Adapty.updateAttribution(attribution, source) (source: String) | Adapty.updateAttribution(attribution, source) (source: AdaptyAttributionSource) |
Adapty.setIntegrationIdentifier(key, value) | Adapty.setIntegrationIdentifier(AdaptyIntegrationIdentifier) |
AdaptyPaywallProduct adını korur — ürünler hâlâ bir flow’a aittir ve getPaywallProducts artık bir AdaptyFlow alır. Diğer AdaptyFlowEventListener metotları (onProductSelected, onPurchaseStarted, onPurchaseFinished, onPurchaseFailure, onRestoreSuccess, onRestoreFailure, onActionPerformed, onAwaitingPurchaseParams, onLoadingProductsFailure ve diğerleri) adlarını ve imzalarını korur. |
Kurulum
adapty-bom sürümünü 4.0.0 (veya daha yenisi) olarak ayarlayın ve projeyi senkronize edin. BOM, sizin için uygun android-sdk ve android-ui sürümlerini otomatik olarak belirler. Bağımlılık tanımlamaları için Adapty SDK’yı Yükleyin sayfasına bakın.
Kaldırılan ve kullanımdan kaldırılan API’ler
Adapty.makePurchase(activity, product, subscriptionUpdateParams, isOfferPersonalized, callback)— kaldırıldı. Bu aşırı yükleme v3’te kullanımdan kaldırılmıştı. Aynı seçenekleri bunun yerineAdaptyPurchaseParametersüzerinden iletin:
- Adapty.makePurchase(activity, product, subscriptionUpdateParams, isOfferPersonalized) { result -> /* ... */ }
+ val params = AdaptyPurchaseParameters.Builder()
+ .withSubscriptionUpdateParams(subscriptionUpdateParams)
+ .withOfferPersonalized(isOfferPersonalized)
+ .build()
+ Adapty.makePurchase(activity, product, params) { result -> /* ... */ }
- Onboardinglar artık kullanım dışı.
AdaptyUI.getOnboardingViewveAdaptyUI.getOnboardingConfiguration, 4.0’da@Deprecatedolarak işaretlendi — onboardinglarınızı Flow Builder’da oluşturulan flow’lara taşıyın.
Flow’ları getirme
getPaywall + getViewConfiguration → getFlow + getFlowConfiguration
Getirme işleminin dönüş türü AdaptyPaywall’dan AdaptyFlow’a değişiyor; yapılandırma yükleyicisi ise AdaptyUI.getViewConfiguration’dan AdaptyUI.getFlowConfiguration’a yeniden adlandırılıyor (AdaptyUI.LocalizedViewConfiguration yerine AdaptyUI.FlowConfiguration döndürüyor). locale parametresi, getirme çağrısından getFlowConfiguration’a taşınıyor:
- Adapty.getPaywall("YOUR_PLACEMENT_ID", locale = "en") { result ->
+ Adapty.getFlow("YOUR_PLACEMENT_ID") { result ->
if (result is AdaptyResult.Success) {
- val paywall = result.value
- if (!paywall.hasViewConfiguration) return@getPaywall
- AdaptyUI.getViewConfiguration(paywall) { configResult ->
+ val flow = result.value
+ if (!flow.hasViewConfiguration) return@getFlow
+ AdaptyUI.getFlowConfiguration(flow, locale = "en") { configResult ->
if (configResult is AdaptyResult.Success) {
val flowConfiguration = configResult.value
}
}
}
}
getPaywallProducts(paywall) → getPaywallProducts(flow)
getPaywallProducts artık Adapty.getFlow tarafından döndürülen bir AdaptyFlow alıyor:
- Adapty.getPaywallProducts(paywall) { result -> /* products */ }
+ Adapty.getPaywallProducts(flow) { result -> /* products */ }
Flow görüntülemelerini takip etme
logShowPaywall → logShowFlow
logShowPaywall, logShowFlow olarak yeniden adlandırıldı ve artık AdaptyPaywall yerine AdaptyFlow alıyor. Etkinlik hâlâ aynı varyasyona karşı kaydedildiğinden, mevcut huni ve A/B testi metrikleri kontrol panelinde herhangi bir değişiklik yapılmadan çalışmaya devam eder.
- Adapty.logShowPaywall(paywall)
+ Adapty.logShowFlow(flow)
v3’te olduğu gibi, Flow Builder veya Paywall Builder tarafından oluşturulan flow’ları ya da paywall’ları 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
getPaywallView / AdaptyPaywallView → getFlowView / AdaptyFlowView
Factory metodunu ve view türünü yeniden adlandırın, ardından AdaptyUI.FlowConfiguration’ı geçirin:
- val paywallView = AdaptyUI.getPaywallView(
- activity,
- viewConfiguration,
- products,
- eventListener,
- )
+ val flowView = AdaptyUI.getFlowView(
+ activity,
+ flowConfiguration,
+ products,
+ eventListener,
+ )
View’ı doğrudan oluşturuyorsanız, show metodu da yeniden adlandırılmıştır:
- val paywallView = AdaptyPaywallView(activity)
- paywallView.showPaywall(viewConfiguration, products, eventListener)
+ val flowView = AdaptyFlowView(activity)
+ flowView.showFlow(flowConfiguration, products, eventListener)
XML layout’larında view tag’ini güncelleyin:
- <com.adapty.ui.AdaptyPaywallView ... />
+ <com.adapty.ui.AdaptyFlowView ... />
İsteğe bağlı personalizedOfferResolver parametresi getFlowView / showFlow / AdaptyFlowScreen’den kaldırıldı. Kişiselleştirilmiş fiyatlandırmayı belirtmek için onAwaitingPurchaseParams aracılığıyla her ürün için ayrı ayrı ayarlayın (AdaptyPurchaseParameters.Builder().withOfferPersonalized(true)). Yeni isteğe bağlı customAssets parametresi, görselleri ve videoları çalışma zamanında geçersiz kılmanıza olanak tanır — bkz. Özel asset’ler.
AdaptyPaywallScreen → AdaptyFlowScreen
Jetpack Compose’da composable’ı yeniden adlandırın ve konfigürasyon parametresini güncelleyin:
- AdaptyPaywallScreen(
- viewConfiguration,
+ AdaptyFlowScreen(
+ flowConfiguration,
products,
eventListener,
)
Olayları Yönetme
Olay dinleyicisi AdaptyUiEventListener’dan AdaptyFlowEventListener’a (ve AdaptyUiDefaultEventListener’dan AdaptyFlowDefaultEventListener’a) yeniden adlandırıldı. Metot adlarının çoğu değişmedi; yaşam döngüsü ve render callback’leri yeniden adlandırıldı:
- class YourListener : AdaptyUiDefaultEventListener() {
+ class YourListener : AdaptyFlowDefaultEventListener() {
- override fun onPaywallShown(context: Context) {}
- override fun onPaywallClosed() {}
+ override fun onFlowShown(context: Context) {}
+ override fun onFlowClosed() {}
- override fun onRenderingError(error: AdaptyError, context: Context) {}
+ override fun onError(error: AdaptyError, context: Context) {}
}
Mevcut handler gövdelerinde kod değişikliği gerekmez — sadece türü ve override’ları yeniden adlandırın. onError, onRenderingError’ın tetiklendiği rendering hatalarının yanı sıra diğer satın alma dışı runtime hatalarında da tetiklenir. Callback’lerin tam listesi için bkz. Flow & paywall olaylarını yönetme.
v4 ayrıca bir onBackPressed(context): Boolean callback’i ekler ve varsayılan davranışı sistem geri tuşunun nasıl çalıştığını değiştirir. Önceden geri tuşuna basmak (veya geri gesturı) aktivitenize ya da fragment’ınıza geçer ve genellikle paywall’ı kapatırdı. v4’te varsayılan uygulama bu basışı tüketir; dolayısıyla sistem geri tuşu artık bir flow’u kendi başına kapatmaz — flow’un sistem gesturıyla kapatılamadığı iOS davranışıyla aynı hizaya gelir. Kullanıcılara açık bir çıkış yolu sunun (bir Close düğmesi veya bir on_device_back aksiyonu) ya da eski davranışı geri kazanmak için onBackPressed’i false döndürecek şekilde geçersiz kılın. Ayrıntılar için Sistem geri tuşu bölümüne bakın.
Varsayılan satın alma işleyicisi artık ekranı kapatmayı da durduruyor. v3’te, varsayılan onPurchaseFinished, kullanıcının iptal etmediği her tamamlanmış satın almanın (başarılı veya beklemedeki satın alma) ardından paywallı kapatıyordu. v4’te bu işlem hiçbir şey yapmıyor, dolayısıyla siz kapatana kadar bir flow, satın alma sonrasında açık kalıyor — bu da iOS davranışıyla örtüşüyor. Bu otomatik kapanmaya güveniyorsanız, satın alma tamamlandığında ekranı kendiniz kapatın. Örnek için Başarılı, iptal edilmiş veya beklemedeki satın alma konusuna bakın.
Attribution ve entegrasyon tanımlayıcıları
updateAttribution
source parametresi String türünden yeni AdaptyAttributionSource türüne değişti ve attribution artık Map<String, Any> türünde (JSON String aşırı yüklemesi de mevcuttur). Önceden tanımlanmış kaynaklardan birini kullanın:
- Adapty.updateAttribution(attribution, "appsflyer") { error -> /* handle the error */ }
+ Adapty.updateAttribution(attribution, AdaptyAttributionSource.APPSFLYER) { error -> /* handle the error */ }
Önceden tanımlanmış kaynaklar: AdaptyAttributionSource.APPLE_ADS, .ADJUST, .APPSFLYER, .BRANCH, .TENJIN. Diğer kaynaklar için bir dizeden oluşturun: AdaptyAttributionSource("your_source").
setIntegrationIdentifier
setIntegrationIdentifier(key, value), bir veya daha fazla AdaptyIntegrationIdentifier değeri alan bir yöntemle değiştirilmiştir. Ham bir string key geçirmek yerine, her tanımlayıcıyı bir kolaylık yöntemiyle oluşturun:
- Adapty.setIntegrationIdentifier("appsflyer_id", appsFlyerId) { error -> /* handle the error */ }
+ Adapty.setIntegrationIdentifier(AdaptyIntegrationIdentifier.appsflyerId(appsFlyerId)) { error -> /* handle the error */ }
Tek bir çağrıda birden fazla tanımlayıcı ayarlayabilirsiniz:
Adapty.setIntegrationIdentifier(
listOf(
AdaptyIntegrationIdentifier.appsflyerId(appsFlyerId),
AdaptyIntegrationIdentifier.adjustDeviceId(adjustDeviceId),
)
) { error -> /* handle the error */ }
Eski her anahtar dizesini ilgili kolaylık metoduyla değiştirin:
| v3 anahtarı | v4 AdaptyIntegrationIdentifier metodu |
|---|---|
"adjust_device_id" | adjustDeviceId(value) |
"airbridge_device_id" | airbridgeDeviceId(value) |
"amplitude_user_id" | amplitudeUserId(value) |
"amplitude_device_id" | amplitudeDeviceId(value) |
"appmetrica_device_id" | appmetricaDeviceId(value) |
"appmetrica_profile_id" | appmetricaProfileId(value) |
"appsflyer_id" | appsflyerId(value) |
"branch_id" | branchId(value) |
"facebook_anonymous_id" | facebookAnonymousId(value) |
"firebase_app_instance_id" | firebaseAppInstanceId(value) |
"mixpanel_user_id" | mixpanelUserId(value) |
"one_signal_subscription_id" | oneSignalSubscriptionId(value) |
"one_signal_player_id" | oneSignalPlayerId(value) |
"posthog_distinct_user_id" | posthogDistinctUserId(value) |
"pushwoosh_hwid" | pushwooshHWID(value) |
"tenjin_analytics_installation_id" | tenjinAnalyticsInstallationId(value) |
AdaptyIntegrationIdentifier(AdaptyIntegrationIdentifier.Key("custom"), customValue) şeklinde özel bir Key kullanarak bu listede olmayan bir anahtar için identifier’ı doğrudan oluşturabilirsiniz. |