Adapty Unity SDK'yı v. 3.3'e Geçirme
Adapty SDK 3.3.0, bazı iyileştirmeler getiren büyük bir sürümdür; ancak bu iyileştirmeler sizden birkaç geçiş adımı gerektirebilir.
- Adapty SDK v3.3.x’e yükseltin.
- Adapty SDK’nın Adapty ve AdaptyUI modüllerindeki birden fazla sınıf, özellik ve metot yeniden adlandırıldı.
- Artık
SetLogLevelmetodu bir callback kabul etmektedir. - Artık
PresentCodeRedemptionSheetmetodu bir callback kabul etmektedir. - Paywall görünümünün nasıl oluşturulduğunu değiştirin.
GetProductsIntroductoryOfferEligibilitymetodunu kaldırın.- Yedek paywallları
Assets/StreamingAssets/dizininde ayrı dosyalara (her platform için bir dosya) kaydedin ve dosya adlarınıSetFallbackPaywallsmetoduna geçirin. - Satın alma işlemini güncelleyin.
- Paywall Builder olaylarının işlenmesini güncelleyin.
- Paywall Builder paywall hatalarının işlenmesini güncelleyin.
- Adjust, Amplitude, AppMetrica, Appsflyer, Branch, Firebase ve Google Analytics, Mixpanel, OneSignal, Pushwoosh için entegrasyon yapılandırmalarını güncelleyin.
- Observer mode uygulamasını güncelleyin.
- Unity eklenti başlatmasını açık bir
Activateçağrısıyla güncelleyin.
Adapty Unity SDK’yı 3.3.x’e Yükseltme
Bu sürüme kadar Adapty SDK, uygulamanızda Adapty’nin düzgün çalışması için gereken temel ve zorunlu SDK’ydi; AdaptyUI SDK ise yalnızca Adapty Paywall Builder kullanıyorsanız gerekli olan isteğe bağlı bir SDK’ydi.
3.3.0 sürümünden itibaren AdaptyUI SDK kullanımdan kaldırılmış olup AdaptyUI, Adapty SDK’ya bir modül olarak entegre edilmiştir. Bu değişiklikler nedeniyle AdaptyUISDK’yı kaldırmanız ve AdaptySDK’yı yeniden yüklemeniz gerekmektedir.
- Projenizden hem AdaptySDK hem de AdaptyUISDK paket bağımlılıklarını kaldırın.
- AdaptySDK ve AdaptyUISDK klasörlerini silin.
- AdaptySDK paketini Unity için Adapty SDK kurulumu ve yapılandırması sayfasında açıklandığı şekilde yeniden içe aktarın.
Yeniden Adlandırmalar
-
Adapty modülünde yeniden adlandırmalar:
Eski sürüm Yeni sürüm Adapty.sdkVersion Adapty.SDKVersion Adapty.LogLevel AdaptyLogLevel Adapty.Paywall AdaptyPaywall Adapty.PaywallFetchPolicy AdaptyPaywallFetchPolicy PaywallProduct AdaptyPaywallProduct Adapty.Profile AdaptyProfile Adapty.ProfileParameters AdaptyProfileParameters ProfileGender AdaptyProfileGender Error AdaptyError -
AdaptyUI modülünde yeniden adlandırmalar:
Eski sürüm Yeni sürüm CreatePaywallView CreateView PresentPaywallView PresentView DismissPaywallView DismissView AdaptyUI.View AdaptyUIView AdaptyUI.Action AdaptyUIUserAction
SetLogLevel Metodunu Güncelleme
Artık SetLogLevel metodu bir callback kabul etmektedir.
- Adapty.SetLogLevel(Adapty.LogLevel.Verbose);
+ Adapty.SetLogLevel(Adapty.LogLevel.Verbose, null); // ya da olası hatayı işlemek için callback geçebilirsiniz
PresentCodeRedemptionSheet Metodunu Güncelleme
Artık PresentCodeRedemptionSheet metodu bir callback kabul etmektedir.
- Adapty.PresentCodeRedemptionSheet();
+ Adapty.PresentCodeRedemptionSheet(null); // ya da olası hatayı işlemek için callback geçebilirsiniz
Paywall Görünümünün Oluşturulma Şeklini Değiştirme
Tam kod örneği için Paywall Builder ile tasarlanan paywall’ın görünüm yapılandırmasını getirme bölümüne bakın.
+ var parameters = new AdaptyUICreateViewParameters()
+ .SetPreloadProducts(true);
- AdaptyUI.CreatePaywallView(
+ AdaptyUI.CreateView(
paywall,
- preloadProducts: true,
+ parameters,
(view, error) => {
// görünümü kullanın
});
GetProductsIntroductoryOfferEligibility Metodunu Kaldırma
Adapty iOS SDK 3.3.0 öncesinde, ürün nesnesi kullanıcının uygun olup olmadığından bağımsız olarak her zaman teklifleri içeriyordu. Teklifi kullanmadan önce uygunluğu manuel olarak kontrol etmeniz gerekiyordu.
Artık ürün nesnesi yalnızca kullanıcı uygunsa teklif içermektedir. Bu sayede uygunluğu ayrıca kontrol etmenize gerek kalmaz; bir teklif mevcutsa kullanıcı zaten uygundur.
Yedek Paywall Sağlama Metodunu Güncelleme
Bu sürüme kadar yedek paywalllar serileştirilmiş JSON olarak geçiriliyordu. v3.3.0’dan itibaren mekanizma değiştirildi:
- Yedek paywallları
/Assets/StreamingAssets/dizinine kaydedin; Android için bir dosya, iOS için başka bir dosya. - Dosya adlarını
SetFallbackPaywallsmetoduna geçirin.
Kodunuz aşağıdaki şekilde değişecektir:
using AdaptySDK;
void SetFallBackPaywalls() {
+ #if UNITY_IOS
+ var assetId = "adapty_fallback_ios.json";
+ #elif UNITY_ANDROID
+ var assetId = "adapty_fallback_android.json";
+ #else
+ var assetId = "";
+ #endif
- Adapty.SetFallbackPaywalls("FALLBACK_PAYWALLS_JSON_STRING", (error) => {
+ Adapty.SetFallbackPaywalls(assetId, (error) => {
// hatayı işleyin
});
}
Nihai kod örneği için Unity’de yedek paywall kullanma sayfasına bakın.
Satın Alma İşlemini Güncelleme
Daha önce iptal edilen ve beklemedeki satın almalar hata olarak değerlendirilip sırasıyla PaymentCancelled ve PendingPurchase kodları döndürülüyordu.
Artık iptal edilen, başarılı ve beklemedeki satın almaları işlemek için yeni bir AdaptyPurchaseResultType sınıfı kullanılmaktadır. Satın alma kodunu aşağıdaki şekilde güncelleyin:
using AdaptySDK;
void MakePurchase(AdaptyPaywallProduct product) {
- Adapty.MakePurchase(product, (profile, error) => {
- // başarılı satın almayı işle
+ Adapty.MakePurchase(product, (result, error) => {
+ switch (result.Type) {
+ case AdaptyPurchaseResultType.Pending:
+ // beklemedeki satın almayı işle
+ break;
+ case AdaptyPurchaseResultType.UserCancelled:
+ // satın alma iptalini işle
+ break;
+ case AdaptyPurchaseResultType.Success:
+ var profile = result.Profile;
+ // başarılı satın almayı işle
+ break;
+ default:
+ break;
}
});
}
Nihai kod örneği için Mobil uygulamada satın alma yapma sayfasına bakın.
Paywall Builder Olaylarının İşlenmesini Güncelleme
İptal edilen ve beklemedeki satın almalar artık hata sayılmamakta; tüm bu durumlar PaywallViewDidFinishPurchase metoduyla işlenmektedir.
-
İptal edilen satın alma olayının işlenmesini silin.
-
Başarılı satın alma olayının işlenmesini aşağıdaki şekilde güncelleyin:
- public void OnFinishPurchase( - AdaptyUI.View view, - Adapty.PaywallProduct product, - Adapty.Profile profile - ) { } + public void PaywallViewDidFinishPurchase( + AdaptyUIView view, + AdaptyPaywallProduct product, + AdaptyPurchaseResult purchasedResult + ) { } -
Eylemlerin işlenmesini güncelleyin:
- public void OnPerformAction( - AdaptyUI.View view, - AdaptyUI.Action action - ) { + public void PaywallViewDidPerformAction( + AdaptyUIView view, + AdaptyUIUserAction action + ) { switch (action.Type) { - case AdaptyUI.ActionType.Close: + case AdaptyUIUserActionType.Close: view.Dismiss(null); break; - case AdaptyUI.ActionType.OpenUrl: + case AdaptyUIUserActionType.OpenUrl: var urlString = action.Value; if (urlString != null { Application.OpenURL(urlString); } default: // diğer olayları işle break; } } -
Başlatılan satın almanın işlenmesini güncelleyin:
- public void OnSelectProduct( - AdaptyUI.View view, - Adapty.PaywallProduct product - ) { } + public void PaywallViewDidSelectProduct( + AdaptyUIView view, + string productId + ) { } -
Başarısız satın almanın işlenmesini güncelleyin:
- public void OnFailPurchase( - AdaptyUI.View view, - Adapty.PaywallProduct product, - Adapty.Error error - ) { } + public void PaywallViewDidFailPurchase( + AdaptyUIView view, + AdaptyPaywallProduct product, + AdaptyError error + ) { } -
Başarılı geri yükleme olayının işlenmesini güncelleyin:
- public void OnFailRestore( - AdaptyUI.View view, - Adapty.Error error - ) { } + public void PaywallViewDidFailRestore( + AdaptyUIView view, + AdaptyError error + ) { }
Nihai kod örneği için Paywall olaylarını işleme sayfasına bakın.
Paywall Builder Paywall Hatalarının İşlenmesini Güncelleme
Hata işleme de değiştirildi; lütfen kodunuzu aşağıdaki rehbere göre güncelleyin.
-
Ürün yükleme hatalarının işlenmesini güncelleyin:
- public void OnFailLoadingProducts( - AdaptyUI.View view, - Adapty.Error error - ) { } + public void PaywallViewDidFailLoadingProducts( + AdaptyUIView view, + AdaptyError error + ) { } -
Render hatalarının işlenmesini güncelleyin:
- public void OnFailRendering( - AdaptyUI.View view, - Adapty.Error error - ) { } + public void PaywallViewDidFailRendering( + AdaptyUIView view, + AdaptyError error + ) { }
Üçüncü Taraf Entegrasyon SDK Yapılandırmasını Güncelleme
Adapty Unity SDK 3.3.0’dan itibaren updateAttribution metodunun genel API’si güncellendi. Daha önce [AnyHashable: Any] sözlüğü kabul ediyordu ve attribution nesnelerini çeşitli servislerden doğrudan geçirmenize olanak tanıyordu. Artık [String: any Sendable] gerektirmektedir, bu nedenle attribution nesnelerini geçirmeden önce dönüştürmeniz gerekecektir.
Aşağıdaki entegrasyonların Adapty Unity SDK 3.3.0 ve sonrasıyla düzgün çalışmasını sağlamak için SDK yapılandırmalarınızı aşağıdaki bölümlerde açıklandığı şekilde güncelleyin.
Adjust
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Adjust entegrasyonu için SDK yapılandırması sayfasına bakın.
- using static AdaptySDK.Adapty;
using AdaptySDK;
Adjust.GetAdid((adid) => {
- Adjust.GetAttribution((attribution) => {
- Dictionary<String, object> data = new Dictionary<String, object>();
-
- data["network"] = attribution.Network;
- data["campaign"] = attribution.Campaign;
- data["adgroup"] = attribution.Adgroup;
- data["creative"] = attribution.Creative;
-
- String attributionString = JsonUtility.ToJson(data);
- Adapty.UpdateAttribution(attributionString, AttributionSource.Adjust, adid, (error) => {
- // handle the error
- });
+ if (adid != null) {
+ Adapty.SetIntegrationIdentifier(
+ "adjust_device_id",
+ adid,
+ (error) => {
+ // handle the error
+ });
}
});
Adjust.GetAttribution((attribution) => {
Dictionary<String, object> data = new Dictionary<String, object>();
data["network"] = attribution.Network;
data["campaign"] = attribution.Campaign;
data["adgroup"] = attribution.Adgroup;
data["creative"] = attribution.Creative;
String attributionString = JsonUtility.ToJson(data);
- Adapty.UpdateAttribution(attributionString, AttributionSource.Adjust, adid, (error) => {
+ Adapty.UpdateAttribution(attributionString, "adjust", (error) => {
// handle the error
});
});
Amplitude
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Amplitude entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- var builder = new Adapty.ProfileParameters.Builder();
- builder.SetAmplitudeUserId("YOUR_AMPLITUDE_USER_ID");
- builder.SetAmplitudeDeviceId(amplitude.getDeviceId());
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
- });
+ Adapty.SetIntegrationIdentifier(
+ "amplitude_user_id",
+ "YOUR_AMPLITUDE_USER_ID",
+ (error) => {
+ // handle the error
+ });
+ Adapty.SetIntegrationIdentifier(
+ "amplitude_device_id",
+ amplitude.getDeviceId(),
+ (error) => {
+ // handle the error
+ });
AppMetrica
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için AppMetrica entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- var deviceId = AppMetrica.GetDeviceId();
- if (deviceId != null {
- var builder = new Adapty.ProfileParameters.Builder();
- builder.SetAppmetricaProfileId("YOUR_ADAPTY_CUSTOMER_USER_ID");
- builder.SetAppmetricaDeviceId(deviceId);
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
- });
- }
+ var deviceId = AppMetrica.GetDeviceId();
+ if (deviceId != null {
+ Adapty.SetIntegrationIdentifier(
+ "appmetrica_device_id",
+ deviceId,
+ (error) => {
+ // handle the error
+ });
+
+ Adapty.SetIntegrationIdentifier(
+ "appmetrica_profile_id",
+ "YOUR_ADAPTY_CUSTOMER_USER_ID",
+ (error) => {
+ // handle the error
+ });
+ }
AppsFlyer
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için AppsFlyer entegrasyonu için SDK yapılandırması sayfasına bakın.
using AppsFlyerSDK;
using AdaptySDK;
// before SDK initialization
AppsFlyer.getConversionData(this.name);
// in your IAppsFlyerConversionData
void onConversionDataSuccess(string conversionData) {
// It's important to include the network user ID
- string appsFlyerId = AppsFlyer.getAppsFlyerId();
- Adapty.UpdateAttribution(conversionData, AttributionSource.Appsflyer, appsFlyerId, (error) => {
+ string appsFlyerId = AppsFlyer.getAppsFlyerId();
+
+ Adapty.SetIntegrationIdentifier(
+ "appsflyer_id",
+ appsFlyerId,
+ (error) => {
// handle the error
});
+
+ Adapty.UpdateAttribution(
+ conversionData,
+ "appsflyer",
+ (error) => {
+ // handle the error
+ });
}
Branch
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Branch entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- class YourBranchImplementation {
- func initializeBranch() {
- Branch.getInstance().initSession(launchOptions: launchOptions) { (data, error) in
- if let data {
- Adapty.updateAttribution(data, source: .branch)
- }
- }
- }
- }
+ Branch.initSession(delegate(Dictionary<string, object> parameters, string error) {
+ string attributionString = JsonUtility.ToJson(parameters);
+
+ Adapty.UpdateAttribution(
+ attributionString,
+ "branch",
+ (error) => {
+ // handle the error
+ });
+ });
Firebase ve Google Analytics
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Firebase ve Google Analytics entegrasyonu için SDK yapılandırması sayfasına bakın.
// We suppose FirebaseAnalytics Unity Plugin is already installed
using AdaptySDK;
Firebase.Analytics
.FirebaseAnalytics
.GetAnalyticsInstanceIdAsync()
.ContinueWithOnMainThread((task) => {
if (!task.IsCompletedSuccessfully) {
// handle error
return;
}
var firebaseId = task.Result
var builder = new Adapty.ProfileParameters.Builder();
- builder.SetFirebaseAppInstanceId(firebaseId);
-
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
+ Adapty.SetIntegrationIdentifier(
+ "firebase_app_instance_id",
+ firebaseId,
+ (error) => {
+ // handle the error
});
});
Mixpanel
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Mixpanel entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- var builder = new Adapty.ProfileParameters.Builder();
- builder.SetMixpanelUserId(Mixpanel.DistinctId);
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
- });
+ var distinctId = Mixpanel.DistinctId;
+ if (distinctId != null) {
+ Adapty.SetIntegrationIdentifier(
+ "mixpanel_user_id",
+ distinctId,
+ (error) => {
+ // handle the error
+ });
+ }
OneSignal
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için OneSignal entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- using OneSignalSDK;
- var pushUserId = OneSignal.Default.PushSubscriptionState.userId;
- var builder = new Adapty.ProfileParameters.Builder();
- builder.SetOneSignalPlayerId(pushUserId);
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
- });
+ var distinctId = Mixpanel.DistinctId;
+ if (distinctId != null) {
+ Adapty.SetIntegrationIdentifier(
+ "mixpanel_user_id",
+ distinctId,
+ (error) => {
+ // handle the error
+ });
+ }
Pushwoosh
Mobil uygulama kodunuzu aşağıdaki şekilde güncelleyin. Tam kod örneği için Pushwoosh entegrasyonu için SDK yapılandırması sayfasına bakın.
using AdaptySDK;
- var builder = new Adapty.ProfileParameters.Builder();
- builder.SetPushwooshHWID(Pushwoosh.Instance.HWID);
- Adapty.UpdateProfile(builder.Build(), (error) => {
- // handle error
- });
+ Adapty.SetIntegrationIdentifier(
+ "pushwoosh_hwid",
+ Pushwoosh.Instance.HWID,
+ (error) => {
+ // handle the error
+ });
Observer Mode Uygulamasını Güncelleme
Paywallları işlemlerle ilişkilendirme şeklinizi güncelleyin. Daha önce 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ği için Observer mode’da satın alma işlemleriyle paywall ilişkilendirme sayfasına bakın.
// every time when calling transaction.finish()
- Adapty.SetVariationForTransaction("<variationId>", "<transactionId>", (error) => {
- if(error != null) {
- // handle the error
- return;
- }
-
- // successful binding
- });
+ Adapty.ReportTransaction(
+ "YOUR_TRANSACTION_ID",
+ "PAYWALL_VARIATION_ID", // optional
+ (error) => {
+ // handle the error
+ });
Unity Eklenti Başlatmasını Güncelleme
Adapty Unity SDK 3.3.0’dan itibaren, eklenti başlatılırken Activate metodunun açıkça çağrılması zorunludur:
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});