迁移 Adapty Unity SDK 至 v3.14

Adapty SDK 3.14.0 是一个主要版本,带来了一些改进,但可能需要你执行一些迁移步骤:

  1. 为付费墙事件添加独立的事件监听器。
  2. 将 AdaptyUI.CreateView 重命名为 AdaptyUI.CreatePaywallView 及相关方法。
  3. 更新 MakePurchase 方法,改用 AdaptyPurchaseParameters 替代单独参数。
  4. 将 SetFallbackPaywalls 替换为 SetFallback 方法。
  5. 更新付费墙属性访问方式,改用 AdaptyPlacement。
  6. 更新远程配置访问方式,改用 AdaptyRemoteConfig 对象。
  7. 将 AdaptyPaywall 模型中的 VendorProductIds 替换为 ProductIdentifiers。
  8. 更新 GetPaywall 的获取策略,改用 AdaptyFetchPolicy。

付费墙事件的独立事件监听器

如果你展示的付费墙是通过付费墙编辑工具设计的,付费墙视图事件现在使用专用的 AdaptyPaywallsEventsListener 接口和 SetPaywallsEventsListener 方法。核心 AdaptyEventListener 接口仍用于用户画像更新和安装详情。

using UnityEngine;
using AdaptySDK;

public class AdaptyListener : MonoBehaviour, 
-    AdaptyEventListener {
+    AdaptyEventListener,
+    AdaptyPaywallsEventsListener {
    
    void Start() {
        Adapty.SetEventListener(this);
+       Adapty.SetPaywallsEventsListener(this);
    }
    
    // AdaptyEventListener methods
    public void OnLoadLatestProfile(AdaptyProfile profile) { }
    public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
    public void OnInstallationDetailsFail(AdaptyError error) { }
    
+   // AdaptyPaywallsEventsListener methods
+   // Implement paywall event handlers here
}

了解有关处理付费墙事件的更多信息。

重命名视图创建与展示方法

视图创建和展示方法已重命名:

using AdaptySDK;

- AdaptyUI.CreateView(paywall, parameters, (view, error) => {
+ AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
    if (error != null) {
      // handle the error
      return;
    }

-   AdaptyUI.PresentView(view, (error) => {
+   AdaptyUI.PresentPaywallView(view, (error) => {
      // handle the error
    });
  });
}

同样,关闭方法也已重命名:

- AdaptyUI.DismissView(view, (error) => {
+ AdaptyUI.DismissPaywallView(view, (error) => {
    // handle the error
  });

更新 MakePurchase 方法

MakePurchase 方法现在使用 AdaptyPurchaseParameters,替代了原来独立的 subscriptionUpdateParams 和 isOfferPersonalized 参数。这样做可以提升类型安全性,并为未来扩展购买参数预留空间。

using AdaptySDK;

void MakePurchase(
  AdaptyPaywallProduct product,
  AdaptySubscriptionUpdateParameters subscriptionUpdate,
  bool? isOfferPersonalized
) {
-  Adapty.MakePurchase(product, subscriptionUpdate, isOfferPersonalized, (result, error) => {
+  var parameters = new AdaptyPurchaseParametersBuilder()
+    .SetSubscriptionUpdateParams(subscriptionUpdate)
+    .SetIsOfferPersonalized(isOfferPersonalized)
+    .Build();
+
+  Adapty.MakePurchase(product, parameters, (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;
    }
  });
}

如果不需要额外参数,可以直接使用:

using AdaptySDK;

void MakePurchase(AdaptyPaywallProduct product) {
  Adapty.MakePurchase(product, (result, error) => {
    // handle purchase result
  });
}

更新备用付费墙方法

Important

升级到 Unity SDK 3.14 时,你需要从 Adapty 看板下载新的备用文件,并替换项目中的现有文件。

设置备用付费墙的方法已更新。SetFallbackPaywalls 方法已重命名为 SetFallback:

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(assetId, (error) => {
+  Adapty.SetFallback(assetId, (error) => {
    // handle the error
  });
}

请查看 在 Unity 中使用备用付费墙 页面中的完整代码示例。

更新付费墙属性访问方式

以下属性已从 AdaptyPaywall 移至 AdaptyPlacement:

using AdaptySDK;

void ProcessPaywall(AdaptyPaywall paywall) {
-  var abTestName = paywall.ABTestName;
-  var audienceName = paywall.AudienceName;
-  var revision = paywall.Revision;
-  var placementId = paywall.PlacementId;

+  var abTestName = paywall.Placement.ABTestName;
+  var audienceName = paywall.Placement.AudienceName;
+  var revision = paywall.Placement.Revision;
+  var placementId = paywall.Placement.Id;
}

更新远程配置访问方式

远程配置属性已被重构为 AdaptyRemoteConfig 对象,以提供更好的组织结构:

using AdaptySDK;

void ProcessRemoteConfig(AdaptyPaywall paywall) {
-  var remoteConfigString = paywall.RemoteConfigString;
-  var locale = paywall.Locale;
-  var remoteConfigDict = paywall.RemoteConfig;

+  var remoteConfigString = paywall.RemoteConfig.Data;
+  var locale = paywall.RemoteConfig.Locale;
+  var remoteConfigDict = paywall.RemoteConfig.Dictionary;
}

更新 AdaptyPaywall 模型用法

VendorProductIds 属性已被弃用,请改用 ProductIdentifiers。新属性返回 AdaptyProductIdentifier 对象,而非简单的字符串,能提供更结构化的产品信息。

using AdaptySDK;

void ProcessPaywallProducts(AdaptyPaywall paywall) {
-  var productIds = paywall.VendorProductIds;
-  foreach (var vendorId in productIds) {
-    // use vendorId
-  }

+  var productIdentifiers = paywall.ProductIdentifiers;
+  foreach (var productId in productIdentifiers) {
+    var vendorId = productId.VendorProductId;
+    // use vendorId
+  }
}

AdaptyProductIdentifier 对象通过 VendorProductId 属性提供对厂商产品 ID 的访问,在保持原有功能的同时,为未来的功能扩展提供了更清晰的结构。

更新 GetPaywall 获取策略

GetPaywall 方法中的 fetchPolicy 参数类型已从 AdaptyPaywallFetchPolicy 更改为 AdaptyPlacementFetchPolicy。此更改统一了 SDK 中获取策略的使用方式。

using AdaptySDK;

void GetPaywall(string placementId) {
-  Adapty.GetPaywall(placementId, AdaptyPaywallFetchPolicy.ReloadRevalidatingCacheData, null, (paywall, error) => {
+  Adapty.GetPaywall(placementId, AdaptyPlacementFetchPolicy.ReloadRevalidatingCacheData, null, (paywall, error) => {
    // handle the result
  });
}