---
title: "Миграция Adapty Unity SDK на версию 3.14"
description: "Перейдите на 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. Обновление доступа к Remote Config через объект `AdaptyRemoteConfig`.
7. Замена `VendorProductIds` на `ProductIdentifiers` в модели `AdaptyPaywall`.
8. Обновление политики загрузки в `GetPaywall` для использования `AdaptyFetchPolicy`.

## Отдельный слушатель событий пейвола \{#separate-event-listener-for-paywall-events\}

Если вы показываете пейволы, созданные с помощью [Paywall Builder](adapty-paywall-builder), события представления пейвола теперь используют специальный интерфейс `AdaptyPaywallsEventsListener` и метод `SetPaywallsEventsListener`. Основной интерфейс `AdaptyEventListener` остаётся для обновлений профиля и данных об установке.

```diff showLineNumbers
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
}
```

[Подробнее об обработке событий пейвола](unity-handling-events).

## Переименование методов создания и отображения представления \{#rename-view-creation-and-presentation-methods\}

Методы создания и отображения представления были переименованы:

```diff showLineNumbers
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
    });
  });
}
```

Аналогично был переименован метод закрытия:

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

## Обновление метода MakePurchase \{#update-makepurchase-method\}

Метод `MakePurchase` теперь использует `AdaptyPurchaseParameters` вместо отдельных аргументов `subscriptionUpdateParams` и `isOfferPersonalized`. Это обеспечивает более строгую типизацию и упрощает расширение параметров покупки в будущем.

```diff showLineNumbers
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;
    }
  });
}
```

Если дополнительные параметры не нужны, можно использовать упрощённый вариант:

```csharp showLineNumbers
using AdaptySDK;

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

## Обновление метода для резервного пейвола \{#update-fallback-method\}

:::important
При обновлении до Unity SDK 3.14 необходимо скачать новые резервные файлы из дашборда Adapty и заменить ими существующие в вашем проекте.
:::

Метод установки резервных пейволов был обновлён. Метод `SetFallbackPaywalls` переименован в `SetFallback`:

```diff showLineNumbers
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](unity-use-fallback-paywalls).

## Обновление доступа к свойствам пейвола \{#update-paywall-property-access\}

Следующие свойства перенесены из `AdaptyPaywall` в `AdaptyPlacement`:

```diff showLineNumbers
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;
}
```

## Обновление доступа к Remote Config \{#update-remote-config-access\}

Свойства Remote Config были реструктурированы в объект `AdaptyRemoteConfig` для лучшей организации:

```diff showLineNumbers
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 \{#update-adapty-paywall-model-usage\}

Свойство `VendorProductIds` объявлено устаревшим в пользу `ProductIdentifiers`. Новое свойство возвращает объекты `AdaptyProductIdentifier` вместо простых строк, предоставляя более структурированную информацию о продуктах.

```diff showLineNumbers
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`, сохраняя прежнюю функциональность и предлагая лучшую структуру для будущих улучшений.

## Обновление политики загрузки в GetPaywall \{#update-getpaywall-fetch-policy\}

Тип параметра `fetchPolicy` в методе `GetPaywall` изменён с `AdaptyPaywallFetchPolicy` на `AdaptyPlacementFetchPolicy`. Это изменение унифицирует использование политики загрузки во всём SDK.

```diff showLineNumbers
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
  });
}
```