Adapty iOS SDK'yı v3.3'e Taşıyın
Adapty SDK 3.3.0, bazı iyileştirmeler getiren önemli bir sürümdür; ancak bu iyileştirmeler sizin tarafınızdan bazı geçiş adımları gerektirebilir.
Adapty.Configuration’ıAdaptyConfigurationolarak yeniden adlandırın.getViewConfigurationmetodunugetPaywallConfigurationolarak yeniden adlandırın.- SwiftUI’dan
didCancelPurchasevepaywallparametrelerini kaldırın veviewConfigurationparametresinipaywallConfigurationolarak yeniden adlandırın. - App Store’dan gelen promosyon içi uygulama satın almalarını işleme şeklinizi güncelleyin;
AdaptyDelegatemetodundandefermentCompletionparametresini kaldırın. getProductsIntroductoryOfferEligibilitymetodunu kaldırın.- Adjust, AirBridge, Amplitude, AppMetrica, Appsflyer, Branch, Facebook Ads, Firebase ve Google Analytics, Mixpanel, OneSignal, Pushwoosh için entegrasyon yapılandırmalarını güncelleyin.
- Observer modu uygulamasını güncelleyin.
Adapty.Configuration’ı AdaptyConfiguration Olarak Yeniden Adlandırın
Adapty iOS SDK aktivasyon kodunu aşağıdaki şekilde güncelleyin:
getViewConfiguration metodunu getPaywallConfiguration olarak yeniden adlandırın
Paywall’ın viewConfiguration değerini getiren metodun adını güncelleyin:
guard paywall.hasViewConfiguration else {
// use your custom logic
return
}
do {
- let paywallConfiguration = try await AdaptyUI.getViewConfiguration(
+ let paywallConfiguration = try await AdaptyUI.getPaywallConfiguration(
forPaywall: paywall
)
// use loaded configuration
} catch {
// handle the error
}
Paywall Builder kullanılarak tasarlanan paywallın görünüm yapılandırmasını getirme hakkında daha fazla bilgi için Paywall Builder ile tasarlanan paywallın görünüm yapılandırmasını getirme bölümüne bakın.
SwiftUI’daki parametreleri güncelleme
SwiftUI’da aşağıdaki güncellemeler yapılmıştır:
didCancelPurchaseparametresi kaldırıldı. Bunun yerinedidFinishPurchasekullanın..paywall()metodu artık bir paywall nesnesi kabul etmiyor.paywallConfigurationparametresi,viewConfigurationparametresinin yerini aldı.
Kodunuzu aşağıdaki şekilde güncelleyin:
@State var paywallPresented = false
var body: some View {
Text("Hello, AdaptyUI!")
.paywall(
isPresented: $paywallPresented,
- paywall: <paywall object>,
- viewConfiguration: <LocalizedViewConfiguration>,
+ paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
didPerformAction: { action in
switch action {
case .close:
paywallPresented = false
default:
// Handle other actions
break
}
},
- didFinishPurchase: { product, profile in paywallPresented = false },
+ didFinishPurchase: { product, purchaseResult in /* handle the result*/ },
didFailPurchase: { product, error in /* handle the error */ },
didFinishRestore: { profile in /* check access level and dismiss */ },
didFailRestore: { error in /* handle the error */ },
didFailRendering: { error in paywallPresented = false }
- didCancelPurchase: { product in /* handle the result*/}
)
}
App Store’dan gelen promosyonlu uygulama içi satın almaların işlenmesini güncelleme
Aşağıdaki örnekte gösterildiği gibi, AdaptyDelegate metodundan defermentCompletion parametresini kaldırarak App Store’dan gelen promosyonlu uygulama içi satın almaların işlenme biçimini güncelleyin:
final class YourAdaptyDelegateImplementation: AdaptyDelegate {
nonisolated func shouldAddStorePayment(for product: AdaptyDeferredProduct) -> Bool {
// 1a.
// Return `true` to continue the transaction in your app.
// 1b.
// Store the product object and return `false` to defer or cancel the transaction.
false
}
// 2. Continue the deferred purchase later on by passing the product to `makePurchase`
func continueDeferredPurchase() async {
let storedProduct: AdaptyDeferredProduct = // get the product object from the 1b.
do {
try await Adapty.makePurchase(product: storedProduct)
} catch {
// handle the error
}
}
}
getProductsIntroductoryOfferEligibility metodunu kaldırın
Adapty iOS SDK 3.3.0 öncesinde, ürün nesnesi kullanıcının uygunluğundan bağımsız olarak her zaman teklifleri içeriyordu. Teklifi kullanmadan önce uygunluğu elle kontrol etmeniz gerekiyordu.
Artık ürün nesnesi yalnızca kullanıcı uygunsa teklif içeriyor. Bu, uygunluğu artık kontrol etmeniz gerekmediği anlamına geliyor — bir teklif mevcutsa kullanıcı zaten uygun demektir.
Uygun olmayan kullanıcılar için teklifleri görüntülemek istiyorsanız sk1Product ve sk2Product’a başvurun.
Üçüncü taraf entegrasyon SDK yapılandırmasını güncelleyin
Adapty iOS SDK 3.3.0 ile birlikte updateAttribution metodunun genel API’sini güncelledik. Önceden [AnyHashable: Any] sözlüğü kabul ederek çeşitli servislerden attribution nesnelerini doğrudan iletmenize olanak tanıyordu. Artık [String: any Sendable] gerektiriyor; bu nedenle attribution nesnelerini iletmeden önce dönüştürmeniz gerekiyor.
Adapty iOS SDK 3.3.0 ve sonrasında entegrasyonların düzgün çalışmasını sağlamak için aşağıdaki entegrasyonların SDK yapılandırmalarını aşağıdaki bölümlerde açıklandığı gibi güncelleyin.
Adjust
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Adjust entegrasyonu için SDK yapılandırması sayfasına bakın.
AirBridge
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için bkz. AirBridge entegrasyonu için SDK yapılandırması.
import AirBridge
- let builder = AdaptyProfileParameters.Builder()
- .with(airbridgeDeviceId: AirBridge.deviceUUID())
-
- Adapty.updateProfile(params: builder.build())
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "airbridge_device_id",
+ value: AirBridge.deviceUUID()
+ )
+ } catch {
+ // handle the error
+ }
Amplitude
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Amplitude entegrasyonu için SDK yapılandırması bölümüne bakın.
import Amplitude
- let builder = AdaptyProfileParameters.Builder()
- .with(amplitudeUserId: Amplitude.instance().userId)
- .with(amplitudeDeviceId: Amplitude.instance().deviceId)
-
- Adapty.updateProfile(params: builder.build())
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "amplitude_user_id",
+ value: Amplitude.instance().userId
+ )
+ try await Adapty.setIntegrationIdentifier(
+ key: "amplitude_device_id",
+ value: Amplitude.instance().deviceId
+ )
+ } catch {
+ // handle the error
+ }
AppMetrica
Mobil uygulama kodunuzu aşağıdaki gibi güncelleyin. Tam kod örneği için AppMetrica entegrasyonunda SDK yapılandırması bölümüne bakın.
import AppMetricaCore
- if let deviceID = AppMetrica.deviceID {
- let builder = AdaptyProfileParameters.Builder()
- .with(appmetricaDeviceId: deviceID)
- .with(appmetricaProfileId: "YOUR_ADAPTY_CUSTOMER_USER_ID")
-
- Adapty.updateProfile(params: builder.build())
- }
+ if let deviceID = AppMetrica.deviceID {
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "appmetrica_device_id",
+ value: deviceID
+ )
+ try await Adapty.setIntegrationIdentifier(
+ key: "appmetrica_profile_id",
+ value: "YOUR_ADAPTY_CUSTOMER_USER_ID"
+ )
+ } catch {
+ // handle the error
+ }
+ }
AppsFlyer
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için AppsFlyer entegrasyonu için SDK yapılandırması sayfasına bakın.
class YourAppsFlyerLibDelegateImplementation {
// Find your implementation of AppsFlyerLibDelegate
// and update onConversionDataSuccess method:
func onConversionDataSuccess(_ conversionInfo: [AnyHashable : Any]) {
let uid = AppsFlyerLib.shared().getAppsFlyerUID()
- Adapty.updateAttribution(
- conversionInfo.toSendableDict(),
- source: .appsflyer,
- networkUserId: uid
- )
+ Adapty.setIntegrationIdentifier(key: "appsflyer_id", value: uid)
+ Adapty.updateAttribution(conversionInfo, source: "appsflyer")
}
}
Branch
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Branch entegrasyonu için SDK yapılandırmasına bakın.
class YourBranchImplementation {
func initializeBranch() {
// Pass the attribution you receive from the initializing method of Branch iOS SDK to Adapty.
Branch.getInstance().initSession(launchOptions: launchOptions) { (data, error) in
- if let data = data?.toSendableDict() {
- Adapty.updateAttribution(data, source: .branch)
- }
+ if let data {
+ Adapty.updateAttribution(data, source: "branch")
+ }
}
}
}
Facebook Ads
Mobil uygulama kodunuzu aşağıda gösterildiği şekilde güncelleyin. Tam kod örneği için Facebook Ads entegrasyonu için SDK yapılandırması bölümüne bakın.
import FacebookCore
- let builder = AdaptyProfileParameters.Builder()
- .with(facebookAnonymousId: AppEvents.shared.anonymousID)
-
- do {
- try Adapty.updateProfile(params: builder.build())
- } catch {
- // handle the error
- }
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "facebook_anonymous_id",
+ value: AppEvents.shared.anonymousID
+ )
+ } catch {
+ // handle the error
+ }
Firebase ve Google Analytics
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Firebase ve Google Analytics entegrasyonu için SDK yapılandırması sayfasına bakın.
import FirebaseCore
import FirebaseAnalytics
FirebaseApp.configure()
- if let appInstanceId = Analytics.appInstanceID() {
- let builder = AdaptyProfileParameters.Builder()
- .with(firebaseAppInstanceId: appInstanceId)
- Adapty.updateProfile(params: builder.build()) { error in
- // handle error
- }
- }
+ if let appInstanceId = Analytics.appInstanceID() {
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "firebase_app_instance_id",
+ value: appInstanceId
+ )
+ } catch {
+ // handle the error
+ }
+ }
Mixpanel
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Mixpanel entegrasyonunda SDK yapılandırması bölümüne bakın.
import Mixpanel
- let builder = AdaptyProfileParameters.Builder()
- .with(mixpanelUserId: Mixpanel.mainInstance().distinctId)
-
- do {
- try await Adapty.updateProfile(params: builder.build())
- } catch {
- // handle the error
- }
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "mixpanel_user_id",
+ value: Mixpanel.mainInstance().distinctId
+ )
+ } catch {
+ // handle the error
+ }
OneSignal
Aşağıda gösterildiği şekilde mobil uygulama kodunuzu güncelleyin. Tam kod örneği için OneSignal entegrasyonu için SDK yapılandırması sayfasına bakın.
// PlayerID (pre-v5 OneSignal SDK)
// in your OSSubscriptionObserver implementation
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges) {
if let playerId = stateChanges.to.userId {
- let params = AdaptyProfileParameters.Builder()
- .with(oneSignalPlayerId: playerId)
- .build()
-
- Adapty.updateProfile(params:params) { error in
- // check error
- }
+ Task {
+ try await Adapty.setIntegrationIdentifier(
+ key: "one_signal_player_id",
+ value: playerId
+ )
+ }
}
}
// SubscriptionID (v5+ OneSignal SDK)
OneSignal.Notifications.requestPermission({ accepted in
- let id = OneSignal.User.pushSubscription.id
-
- let builder = AdaptyProfileParameters.Builder()
- .with(oneSignalSubscriptionId: id)
-
- Adapty.updateProfile(params: builder.build())
+ Task {
+ try await Adapty.setIntegrationIdentifier(
+ key: "one_signal_subscription_id",
+ value: OneSignal.User.pushSubscription.id
+ )
+ }
}, fallbackToSettings: true)
Pushwoosh
Mobil uygulama kodunuzu aşağıda gösterildiği gibi güncelleyin. Tam kod örneği için Pushwoosh entegrasyonunun SDK yapılandırması sayfasına bakın.
- let params = AdaptyProfileParameters.Builder()
- .with(pushwooshHWID: Pushwoosh.sharedInstance().getHWID())
- .build()
-
- Adapty.updateProfile(params: params) { error in
- // handle the error
- }
+ do {
+ try await Adapty.setIntegrationIdentifier(
+ key: "pushwoosh_hwid",
+ value: Pushwoosh.sharedInstance().getHWID()
+ )
+ } catch {
+ // handle the error
+ }
Observer mode implementasyonunu güncelleme
Paywall’ları işlemlerle nasıl ilişkilendirdiğinizi güncelleyin. Önceden, variationId atamak için setVariationId metodunu kullanıyordunuz. Artık variationId’yi, yeni reportTransaction metodunu kullanarak işlemi kaydederken doğrudan ekleyebilirsiniz. Nihai kod örneğine Observer mode’da paywall’ları satın alma işlemleriyle ilişkilendirme bölümünden bakabilirsiniz.
İşlemi reportTransaction metoduyla kaydetmeyi unutmayın. Bu adımı atlarsanız Adapty işlemi tanımaz, access level vermez, analitiklere eklemez veya entegrasyonlara göndermez. Bu adım zorunludur!
- let variationId = paywall.variationId
-
- // There are two overloads: for StoreKit 1 and StoreKit 2
- Adapty.setVariationId(variationId, forPurchasedTransaction: transaction) { error in
- if error == nil {
- // successful binding
- }
- }
+ do {
+ // every time when calling transaction.finish()
+ try await Adapty.reportTransaction(transaction, withVariationId: <YOUR_PAYWALL_VARIATION_ID>)
+ } catch {
+ // handle the error
+ }