Adapty Unity SDK'yı v3.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 sizin tarafınızdan bazı geçiş adımları gerektirebilir.

  1. Adapty SDK v3.3.x sürümüne yükseltin.
  2. Adapty SDK’nın Adapty ve AdaptyUI modüllerindeki birden fazla sınıf, özellik ve yöntem yeniden adlandırıldı.
  3. Artık SetLogLevel yöntemi bir callback’i argüman olarak kabul etmektedir.
  4. Artık PresentCodeRedemptionSheet yöntemi bir callback’i argüman olarak kabul etmektedir.
  5. Paywall görünümünün oluşturulma şeklini değiştirin.
  6. GetProductsIntroductoryOfferEligibility yöntemini kaldırın.
  7. Yedek paywallları Assets/StreamingAssets/ dizininde ayrı dosyalara (platform başına bir tane) kaydedin ve dosya adlarını SetFallbackPaywalls yöntemine iletin.
  8. Satın alma işlemini güncelleyin.
  9. Paywall Builder olaylarının işlenmesini güncelleyin.
  10. Paywall Builder paywall hatalarının işlenmesini güncelleyin.
  11. Adjust, Amplitude, AppMetrica, Appsflyer, Branch, Firebase ve Google Analytics, Mixpanel, OneSignal, Pushwoosh için entegrasyon yapılandırmalarını güncelleyin.
  12. Observer modu uygulamasını güncelleyin.
  13. Unity eklentisi başlatmasını açık bir Activate çağrısıyla güncelleyin.

Adapty Unity SDK’yı 3.3.x Sürümüne Yükseltin

Bu sürüme kadar Adapty SDK, uygulamanızda Adapty’nin düzgün çalışması için zorunlu olan temel SDK’ydi; AdaptyUI SDK ise yalnızca Adapty Paywall Builder kullanıyorsanız gerekli hale gelen isteğe bağlı bir SDK’ydı.

3.3.0 sürümüyle birlikte AdaptyUI SDK kullanımdan kaldırılmış ve AdaptyUI, Adapty SDK’ya bir modül olarak dahil edilmiştir. Bu değişiklikler nedeniyle AdaptyUI SDK’yı kaldırıp AdaptySDK’yı yeniden yüklemeniz gerekmektedir.

  1. AdaptySDK ve AdaptyUISDK paket bağımlılıklarını projenizden kaldırın.
  2. AdaptySDK ve AdaptyUISDK klasörlerini silin.
  3. AdaptySDK paketini Unity için Adapty SDK kurulumu ve yapılandırması sayfasında açıklandığı gibi yeniden içe aktarın.

Yeniden Adlandırmalar

  1. Adapty modülünde yeniden adlandır:

    Eski sürümYeni sürüm
    Adapty.sdkVersionAdapty.SDKVersion
    Adapty.LogLevelAdaptyLogLevel
    Adapty.PaywallAdaptyPaywall
    Adapty.PaywallFetchPolicyAdaptyPaywallFetchPolicy
    PaywallProductAdaptyPaywallProduct
    Adapty.ProfileAdaptyProfile
    Adapty.ProfileParametersAdaptyProfileParameters
    ProfileGenderAdaptyProfileGender
    ErrorAdaptyError
  2. AdaptyUI modülünde yeniden adlandırmalar:

    Eski versiyonYeni versiyon
    CreatePaywallViewCreateView
    PresentPaywallViewPresentView
    DismissPaywallViewDismissView
    AdaptyUI.ViewAdaptyUIView
    AdaptyUI.ActionAdaptyUIUserAction

SetLogLevel Metodunu Güncelleme

Artık SetLogLevel metodu bir callback kabul etmektedir.

- Adapty.SetLogLevel(Adapty.LogLevel.Verbose);
+ Adapty.SetLogLevel(Adapty.LogLevel.Verbose, null); // or you can pass the callback to handle the possible error

PresentCodeRedemptionSheet Metodunu Güncelleme

Artık PresentCodeRedemptionSheet metodu bir callback kabul etmektedir.

- Adapty.PresentCodeRedemptionSheet();
+ Adapty.PresentCodeRedemptionSheet(null); // or you can pass the callback to handle the possible error

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) => {
  // use the view
});

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 yöntemi güncellendi

Bu sürüme kadar yedek paywall’lar serileştirilmiş JSON olarak iletiliyordu. v 3.3.0 itibarıyla mekanizma değişti:

  1. Yedek paywall’ları /Assets/StreamingAssets/ dizinindeki dosyalara kaydedin; Android için bir dosya, iOS için ayrı bir dosya.
  2. Dosya adlarını SetFallbackPaywalls metoduna geçirin.

Kodunuz şu şekilde değişecek:

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) => {
    // handle the error
  });
}

Son kod örneğini Unity’de yedek paywall kullanımı sayfasında inceleyebilirsiniz.

Satın alma güncelleme

Daha önce iptal edilen ve beklemedeki satın almalar hata olarak değerlendirilir ve sırasıyla PaymentCancelled ve PendingPurchase kodlarını döndürürdü.

Artık iptal edilen, başarılı ve beklemedeki satın almaları işlemek için yeni bir AdaptyPurchaseResultType sınıfı kullanılıyor. Satın alma kodunu aşağıdaki şekilde güncelleyin:

using AdaptySDK;

void MakePurchase(AdaptyPaywallProduct product) {
- Adapty.MakePurchase(product, (profile, error) => {
-   // handle successfull purchase
+ Adapty.MakePurchase(product, (result, error) => {
+   switch (result.Type) {
+     case AdaptyPurchaseResultType.Pending:
+       // handle pending purchase
+       break;
+     case AdaptyPurchaseResultType.UserCancelled:
+       // handle purchase cancellation
+       break;
+     case AdaptyPurchaseResultType.Success:
+       var profile = result.Profile;
+       // handle successful purchase
+       break;
+     default:
+       break;
    }
  });
}

Lütfen çevirmek istediğiniz MDX belgesini paylaşın.

Paywall Builder olaylarının işlenmesini güncelleme

İptal edilen ve bekleyen satın almalar artık hata olarak değerlendirilmiyor; tüm bu durumlar PaywallViewDidFinishPurchase metodu ile işleniyor.

  1. İptal edilen satın alma olayının işlenmesini silin.

  2. 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
   + ) { }
  1. Aksiyon işlemeyi 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:
            // handle other events
            break;
        }
    }
  2. Başlatılan satın alma işleminin yönetimini güncelleyin:

    - public void OnSelectProduct(
    -   AdaptyUI.View view, 
    -   Adapty.PaywallProduct product
    - ) { }
    
    + public void PaywallViewDidSelectProduct(
    +   AdaptyUIView view, 
    +   string productId
    + ) { }
  3. Başarısız satın alma işleminin yönetimini güncelleyin:

   - public void OnFailPurchase(
   -   AdaptyUI.View view, 
   -   Adapty.PaywallProduct product, 
   -   Adapty.Error error
   - ) { }
   
   + public void PaywallViewDidFailPurchase(
   +   AdaptyUIView view, 
   +   AdaptyPaywallProduct product, 
   +   AdaptyError error
   + ) { }
   
  1. Başarılı geri yükleme olayının işlenmesini güncelleyin: Check out the final code example in the Handle paywall events page.

Paywall Builder paywall hatalarının işlenmesini güncelleyin

Hata işleme yöntemi de değiştirildi; lütfen aşağıdaki rehbere göre kodunuzu güncelleyin.

  1. Ü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
    + ) { }
  2. 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 gibi 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ğıda gösterildiği gibi 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

Aşağıda gösterildiği gibi mobil uygulama kodunuzu 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ğıda gösterildiği şekilde güncelleyin. Tam kod örneği için AppsFlyer entegrasyonunda SDK yapılandırması bölümüne 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ğıda gösterildiği gibi güncelleyin. Tam kod örneği için Branch entegrasyonu için SDK yapılandırmasına göz atı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ğı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.

 // 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ğıda gösterildiği gibi güncelleyin. Tam kod örneği için Mixpanel entegrasyonu için SDK yapılandırması bölümüne 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ğıda gösterildiği gibi 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üncelleyin

Paywall’ları işlemlere bağlama şeklinizi güncelleyin. Daha önce variationId atamak için setVariationId metodunu kullanıyordunuz. Artık yeni reportTransaction metoduyla işlemi kaydederken variationId’yi doğrudan dahil edebilirsiniz. Son kod örneğine Observer modunda paywall’ları satın alma işlemleriyle ilişkilendirme sayfasından bakabilirsiniz.

 // 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;
   }
});