Migrer le SDK Adapty Unity vers la v3.3

Adapty SDK 3.3.0 est une version majeure qui apporte des améliorations pouvant nécessiter quelques étapes de migration de votre part.

  1. Passez au SDK Adapty v3.3.x.
  2. Plusieurs classes, propriétés et méthodes ont été renommées dans les modules Adapty et AdaptyUI du SDK Adapty.
  3. Désormais, la méthode SetLogLevel accepte un callback en argument.
  4. Désormais, la méthode PresentCodeRedemptionSheet accepte un callback en argument.
  5. Modifiez la façon dont la vue du paywall est créée.
  6. Supprimez la méthode GetProductsIntroductoryOfferEligibility.
  7. Enregistrez les paywalls de secours dans des fichiers séparés (un par plateforme) dans Assets/StreamingAssets/ et transmettez les noms de fichiers à la méthode SetFallbackPaywalls.
  8. Mettez à jour la procédure d’achat.
  9. Mettez à jour la gestion des événements du Paywall Builder.
  10. Mettez à jour la gestion des erreurs du paywall Paywall Builder.
  11. Mettez à jour les configurations d’intégration pour Adjust, Amplitude, AppMetrica, Appsflyer, Branch, Firebase et Google Analytics, Mixpanel, OneSignal, Pushwoosh.
  12. Mettez à jour l’implémentation du mode Observer.
  13. Mettez à jour l’initialisation du plugin Unity avec un appel Activate explicite.

Mettre à jour le SDK Unity Adapty vers la version 3.3.x

Jusqu’à cette version, le SDK Adapty était le SDK principal et obligatoire pour le bon fonctionnement d’Adapty dans votre application, tandis que le SDK AdaptyUI était un SDK optionnel, nécessaire uniquement si vous utilisiez le Paywall Builder d’Adapty.

À partir de la version 3.3.0, le SDK AdaptyUI est déprécié et AdaptyUI est intégré au SDK Adapty en tant que module. En raison de ces changements, vous devez supprimer le SDK AdaptyUI et réinstaller le SDK Adapty.

  1. Supprimez les dépendances de packages AdaptySDK et AdaptyUISDK de votre projet.
  2. Supprimez les dossiers AdaptySDK et AdaptyUISDK.
  3. Importez à nouveau le package AdaptySDK comme décrit sur la page Installation et configuration du SDK Adapty pour Unity.

Renommages

  1. Renommer dans le module Adapty :
Ancienne versionNouvelle version
Adapty.sdkVersionAdapty.SDKVersion
Adapty.LogLevelAdaptyLogLevel
Adapty.PaywallAdaptyPaywall
Adapty.PaywallFetchPolicyAdaptyPaywallFetchPolicy
PaywallProductAdaptyPaywallProduct
Adapty.ProfileAdaptyProfile
Adapty.ProfileParametersAdaptyProfileParameters
ProfileGenderAdaptyProfileGender
ErrorAdaptyError
  1. Renommages dans le module AdaptyUI :

    Ancienne versionNouvelle version
    CreatePaywallViewCreateView
    PresentPaywallViewPresentView
    DismissPaywallViewDismissView
    AdaptyUI.ViewAdaptyUIView
    AdaptyUI.ActionAdaptyUIUserAction

Modifier la méthode SetLogLevel

Désormais, la méthode SetLogLevel accepte un callback en argument.

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

Modifier la méthode PresentCodeRedemptionSheet

Désormais, la méthode PresentCodeRedemptionSheet accepte un callback en argument.

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

Modifier la façon dont la vue du paywall est créée

Pour un exemple de code complet, consultez Récupérer la configuration de vue d’un paywall conçu avec le Paywall Builder.

+ var parameters = new AdaptyUICreateViewParameters()
+   .SetPreloadProducts(true);

- AdaptyUI.CreatePaywallView(
+ AdaptyUI.CreateView(
   paywall, 
-  preloadProducts: true,
+  parameters,
  (view, error) => {
  // use the view
});

Supprimer la méthode GetProductsIntroductoryOfferEligibility

Avant la version 3.3.0 du SDK Adapty iOS, l’objet produit incluait toujours les offres, quelle que soit l’éligibilité de l’utilisateur. Vous deviez vérifier manuellement l’éligibilité avant d’utiliser l’offre.

Désormais, l’objet produit n’inclut une offre que si l’utilisateur y est éligible. Vous n’avez donc plus besoin de vérifier l’éligibilité — si une offre est présente, l’utilisateur est éligible.

Méthode de mise à jour pour fournir des paywalls de secours

Jusqu’à cette version, les paywalls de secours étaient transmis sous forme de JSON sérialisé. À partir de la v 3.3.0, le mécanisme change :

  1. Enregistrez les paywalls de secours dans des fichiers situés dans /Assets/StreamingAssets/, un fichier pour Android et un autre pour iOS.
  2. Transmettez les noms de fichiers à la méthode SetFallbackPaywalls.

Votre code sera modifié de la façon suivante :

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

Consultez l’exemple de code final sur la page Utiliser les paywalls de secours dans Unity.

Mise à jour du processus d’achat

Les achats précédemment annulés et en attente étaient considérés comme des erreurs et renvoyaient respectivement les codes PaymentCancelled et PendingPurchase.

Désormais, une nouvelle classe AdaptyPurchaseResultType est utilisée pour traiter les achats annulés, réussis et en attente. Mettez à jour le code d’achat de la façon suivante :

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

Consultez l’exemple de code final sur la page Effectuer des achats dans l’application mobile.

Mettre à jour la gestion des événements du Paywall Builder

Les achats annulés et en attente ne sont plus considérés comme des erreurs ; tous ces cas sont désormais traités via la méthode PaywallViewDidFinishPurchase.

  1. Supprimez le traitement de l’événement d’achat annulé.

  2. Mettez à jour la gestion de l’événement d’achat réussi de la façon suivante :

   - public void OnFinishPurchase(
   -   AdaptyUI.View view, 
   -   Adapty.PaywallProduct product, 
   -   Adapty.Profile profile
   - ) { }
   
   + public void PaywallViewDidFinishPurchase(
   +   AdaptyUIView view, 
   +   AdaptyPaywallProduct product, 
   +   AdaptyPurchaseResult purchasedResult
   + ) { }
  1. Mettre à jour la gestion des actions :

    - 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. Mettez à jour la gestion du début d’achat :

    - public void OnSelectProduct(
    -   AdaptyUI.View view, 
    -   Adapty.PaywallProduct product
    - ) { }
    
    + public void PaywallViewDidSelectProduct(
    +   AdaptyUIView view, 
    +   string productId
    + ) { }
  3. Mettez à jour la gestion de l’échec d’achat :

  - public void OnFailPurchase(
  -   AdaptyUI.View view, 
  -   Adapty.PaywallProduct product, 
  -   Adapty.Error error
  - ) { }
  
  + public void PaywallViewDidFailPurchase(
  +   AdaptyUIView view, 
  +   AdaptyPaywallProduct product, 
  +   AdaptyError error
  + ) { }
  
  1. Mettez à jour la gestion de l’événement de restauration réussie :
  - public void OnFailRestore(
  -   AdaptyUI.View view, 
  -   Adapty.Error error
  - ) { }
  
  + public void PaywallViewDidFailRestore(
  +   AdaptyUIView view, 
  +   AdaptyError error
  + ) { }
  

Consultez l’exemple de code final sur la page Gérer les événements de paywall.

Mise à jour de la gestion des erreurs des paywalls du Paywall Builder

La gestion des erreurs a également changé, veuillez mettre à jour votre code selon les instructions ci-dessous.

  1. Mettez à jour la gestion des erreurs de chargement des produits :

    - public void OnFailLoadingProducts(
    -   AdaptyUI.View view, 
    -   Adapty.Error error
    - ) { }
    
    + public void PaywallViewDidFailLoadingProducts(
    +   AdaptyUIView view, 
    +   AdaptyError error
    + ) { }
  2. Mettez à jour la gestion des erreurs de rendu :

    - public void OnFailRendering(
    -   AdaptyUI.View view, 
    -   Adapty.Error error
    - ) { }
    
    + public void PaywallViewDidFailRendering(
    +   AdaptyUIView view, 
    +   AdaptyError error
    + ) { }

Mettre à jour la configuration du SDK d’intégration tiers

À partir d’Adapty Unity SDK 3.3.0, nous avons mis à jour l’API publique de la méthode updateAttribution. Auparavant, elle acceptait un dictionnaire [AnyHashable: Any], vous permettant de passer directement des objets d’attribution depuis différents services. Désormais, elle requiert un [String: any Sendable], vous devrez donc convertir les objets d’attribution avant de les transmettre.

Pour garantir le bon fonctionnement des intégrations avec Adapty Unity SDK 3.3.0 et versions ultérieures, mettez à jour les configurations de votre SDK pour les intégrations suivantes, comme décrit dans les sections ci-dessous.

Adjust

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Adjust.

- 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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Amplitude.

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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration AppMetrica.

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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration AppsFlyer.

 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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Branch.

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 et Google Analytics

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Firebase et Google Analytics.

 // 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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Mixpanel.

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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration OneSignal.

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

Mettez à jour le code de votre application mobile comme indiqué ci-dessous. Pour un exemple de code complet, consultez la configuration du SDK pour l’intégration Pushwoosh.

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

Mettre à jour l’implémentation du mode Observer

Mettez à jour la façon dont vous associez les paywalls aux transactions. Auparavant, vous utilisiez la méthode setVariationId pour assigner le variationId. Vous pouvez maintenant inclure le variationId directement lors de l’enregistrement de la transaction grâce à la nouvelle méthode reportTransaction. Consultez l’exemple de code complet dans Associer des paywalls aux transactions d’achat en mode Observer.

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

Mettre à jour l’initialisation du plugin Unity

À partir de la version 3.3.0 de l’Adapty Unity SDK, l’appel explicite de la méthode Activate lors de l’initialisation du plugin est obligatoire :

Adapty.Activate(builder.Build(), (error) => {
   if (error != null) {
       // handle the error
       return;
   }
});