Установка и настройка Unity SDK
SDK Adapty включает два ключевых модуля для интеграции в ваше Unity-приложение:
- Core Adapty: основной SDK, необходимый для работы Adapty в вашем приложении.
- AdaptyUI: этот модуль нужен, если вы используете Adapty Paywall Builder — удобный no-code инструмент для создания кросс-платформенных пейволов.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наше демонстрационное приложение — оно показывает полный процесс настройки: отображение пейволов, совершение покупок и другие базовые функции.
Требования
Adapty SDK поддерживает iOS 13.0+, однако для работы с пейволами, созданными в Paywall Builder, требуется iOS 15.0+.
Adapty совместима с Google Play Billing Library версий до 8.x включительно. По умолчанию Adapty использует Google Play Billing Library v7.0.0. Чтобы использовать более новую версию, переопределите зависимость Billing в вашей Android-сборке.
Установка SDK — это шаг 5 настройки Adapty. Прежде чем покупки заработают в вашем приложении, вам также нужно подключить приложение к сторам, а затем создать продукты, пейвол и плейсмент в дашборде Adapty. Гайд по быстрому старту описывает все необходимые шаги.
Установка Adapty SDK
- Скачайте
adapty-unity-plugin-*.unitypackageс GitHub и импортируйте его в свой проект.
-
Скачайте и импортируйте плагин External Dependency Manager.
-
SDK использует плагин «External Dependency Manager» для управления зависимостями iOS Cocoapods и Android gradle. После установки может потребоваться вручную запустить менеджер зависимостей:
Assets -> External Dependency Manager -> Android Resolver -> Force Resolveи
Assets -> External Dependency Manager -> iOS Resolver -> Install Cocoapods -
При сборке Unity-проекта для iOS вы получите файл
Unity-iPhone.xcworkspace, который нужно открывать вместоUnity-iPhone.xcodeproj, иначе зависимости Cocoapods не будут использованы.
Активация модуля Adapty в SDK
Активируйте Adapty SDK в коде вашего приложения.
Adapty SDK нужно активировать только один раз в приложении.
Чтобы получить Public SDK Key:
- Откройте дашборд Adapty и перейдите в App settings → General.
- В разделе Api keys скопируйте Public SDK Key (не Secret Key).
- Замените
"YOUR_PUBLIC_SDK_KEY"в коде на скопированный ключ.
- Используйте Public SDK key для инициализации Adapty. Secret key предназначен только для серверного API.
- SDK keys уникальны для каждого приложения, поэтому при наличии нескольких приложений убедитесь, что выбрали правильный ключ.
using UnityEngine;
using AdaptySDK;
public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
void Start() {
DontDestroyOnLoad(this.gameObject);
Adapty.SetEventListener(this);
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
}
public void OnLoadLatestProfile(AdaptyProfile profile) { }
public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
public void OnInstallationDetailsFail(AdaptyError error) { }
}
Дождитесь callback завершения Activate перед вызовом любых других методов SDK. Подробная последовательность описана в Порядок вызовов в Unity SDK.
Настройте прослушивание событий
Создайте скрипт для прослушивания событий Adapty. Назовите его AdaptyListener в вашей сцене. Рекомендуем использовать метод DontDestroyOnLoad для этого объекта, чтобы он сохранялся на протяжении всего жизненного цикла приложения.
Adapty использует пространство имён AdaptySDK. В начале файлов скриптов, использующих Adapty SDK, можно добавить:
using AdaptySDK;
Подпишитесь на события Adapty:
using UnityEngine;
using AdaptySDK;
public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
public void OnLoadLatestProfile(AdaptyProfile profile) {
// handle updated profile data
}
public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
public void OnInstallationDetailsFail(AdaptyError error) { }
}
Мы рекомендуем настроить порядок выполнения скриптов (Script Execution Order) так, чтобы AdaptyListener располагался раньше Default Time. Это гарантирует, что Adapty инициализируется как можно раньше.
Добавьте Kotlin-плагин в проект
Этот шаг обязателен. Если пропустить его, мобильное приложение может упасть при отображении пейвола.
-
В Player Settings убедитесь, что выбраны опции Custom Launcher Gradle Template и Custom Base Gradle Template.
-
Добавьте следующую строку в
/Assets/Plugins/Android/launcherTemplate.gradle:apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: 'setupSymbols.gradle' apply from: '../shared/keepUnitySymbols.gradle' -
Добавьте следующую строку в
/Assets/Plugins/Android/baseProjectTemplate.gradle:
plugins {
// If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
// See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
// See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
// To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
id 'com.android.application' version '8.3.0' apply false
id 'com.android.library' version '8.3.0' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
**BUILD_SCRIPT_DEPS**
}
Теперь настройте пейволы в приложении:
- Если вы используете Adapty Paywall Builder, сначала активируйте модуль AdaptyUI ниже, затем следуйте quickstart для Paywall Builder.
- Если вы создаёте собственный интерфейс пейвола, см. quickstart для кастомных пейволов.
Активация модуля AdaptyUI в Adapty SDK
Если вы планируете использовать Paywall Builder и установили модуль AdaptyUI, его необходимо активировать. Это можно сделать при конфигурации:
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetActivateUI(true);
Дополнительная настройка
Логирование
Настройка системы логирования
Adapty записывает ошибки и другую важную информацию, чтобы помочь вам разобраться в том, что происходит. Доступны следующие уровни логирования:
| Уровень | Описание |
|---|---|
error | Будут логироваться только ошибки |
warn | Будут логироваться ошибки и сообщения от SDK, которые не вызывают критических ошибок, но заслуживают внимания |
info | Будут логироваться ошибки, предупреждения и различные информационные сообщения |
verbose | Будет логироваться любая дополнительная информация, которая может быть полезна при отладке: вызовы функций, API-запросы и т. д. |
| Вы можете задать уровень логирования в приложении во время настройки Adapty: |
// 'verbose' is recommended for development and the first production release
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
builder.LogLevel = AdaptyLogLevel.Verbose;
Уровень логирования можно также изменить во время работы приложения:
Adapty.SetLogLevel(AdaptyLogLevel.Verbose, (error) => {
// handle result
});
Политика работы с данными
Adapty не хранит персональные данные ваших пользователей, если вы явно их не передаёте. При этом вы можете настроить дополнительные политики безопасности данных в соответствии с требованиями стора или законодательства конкретной страны.
Отключение сбора и передачи IP-адресов
При активации модуля Adapty установите SetIPAddressCollectionDisabled в значение true, чтобы отключить сбор и передачу IP-адресов пользователей. По умолчанию используется значение false.
Используйте этот параметр, чтобы усилить защиту конфиденциальности пользователей, соблюдать региональные требования по защите данных (например, GDPR или CCPA) или сократить сбор лишних данных, если функции на основе IP-адреса вашему приложению не нужны.
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetIPAddressCollectionDisabled(true);
Отключить сбор и передачу рекламного идентификатора
При активации модуля Adapty установите SetAppleIDFACollectionDisabled и/или SetGoogleAdvertisingIdCollectionDisabled в true, чтобы отключить сбор рекламных идентификаторов. Значение по умолчанию — false.
Используйте этот параметр для соответствия политикам App Store/Google Play, чтобы не вызывать запрос App Tracking Transparency, или если ваше приложение не требует рекламной атрибуции или аналитики на основе рекламных идентификаторов.
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAppleIDFACollectionDisabled(true)
.SetGoogleAdvertisingIdCollectionDisabled(true);
Настройте конфигурацию медиакэша для AdaptyUI
По умолчанию AdaptyUI кэширует медиафайлы (изображения, видео) для повышения производительности и сокращения расхода трафика. Вы можете изменить параметры кэша, передав собственную конфигурацию.
Используйте SetAdaptyUIMediaCache, чтобы переопределить настройки кэша по умолчанию:
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAdaptyUIMediaCache(
100 * 1024 * 1024, // MemoryStorageTotalCostLimit 100MB
null, // MemoryStorageCountLimit
100 * 1024 * 1024 // DiskStorageSizeLimit 100MB
);
Параметры:
| Параметр | Обязательный | Описание |
|---|---|---|
| memoryStorageTotalCostLimit | нет | Общий размер кэша в памяти в байтах. По умолчанию — значение, зависящее от платформы. |
| memoryStorageCountLimit | нет | Максимальное количество элементов в памяти. По умолчанию — значение, зависящее от платформы. |
| diskStorageSizeLimit | нет | Максимальный размер файлов на диске в байтах. По умолчанию — значение, зависящее от платформы. |
Включение локальных уровней доступа (Android)
По умолчанию локальные уровни доступа включены на iOS и отключены на Android. Чтобы включить их и на Android, установите SetGoogleLocalAccessLevelAllowed в true:
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetGoogleLocalAccessLevelAllowed(true);
Очистка данных при восстановлении из резервной копии
Если SetAppleClearDataOnBackup задан как true, SDK обнаруживает восстановление приложения из резервной копии iCloud и удаляет все локально сохранённые данные SDK, включая кешированную информацию о профиле, сведения о продуктах и пейволы. После этого SDK инициализируется с чистым состоянием. Значение по умолчанию — false.
Удаляется только локальный кеш SDK. История транзакций с Apple и данные пользователей на серверах Adapty остаются без изменений.
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAppleClearDataOnBackup(true);
Устранение неполадок
Правила резервного копирования Android (настройка Auto Backup)
Некоторые SDK (включая Adapty) поставляются с собственной конфигурацией Android Auto Backup. Если вы используете несколько SDK, каждый из которых определяет правила резервного копирования, слияние манифестов Android может завершиться ошибкой, связанной с android:fullBackupContent, android:dataExtractionRules или android:allowBackup.
Типичные симптомы ошибки: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)
Эти изменения нужно вносить в директорию Android-платформы (обычно находится в папке android/ вашего проекта).
Чтобы решить проблему, необходимо:
-
Указать механизму слияния манифестов использовать значения вашего приложения для атрибутов, связанных с резервным копированием.
-
Создать файлы правил резервного копирования, объединяющие правила Adapty с правилами других SDK.
1. Добавьте пространство имён tools в манифест
В файле AndroidManifest.xml убедитесь, что корневой тег <manifest> включает tools:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
...
</manifest>
2. Переопределите атрибуты резервного копирования в <application>
В том же файле AndroidManifest.xml обновите тег <application>, чтобы ваше приложение предоставляло итоговые значения и указывало механизму слияния манифестов заменять значения библиотек:
<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">
...
</application>
Если какой-либо SDK также задаёт android:allowBackup, включите его в tools:replace:
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
3. Создайте объединённые файлы правил резервного копирования
Создайте XML-файлы в директории res/xml/ вашего Android-проекта, объединяющие правила Adapty с правилами других SDK. Android использует разные форматы правил резервного копирования в зависимости от версии ОС, поэтому создание обоих файлов обеспечивает совместимость со всеми версиями Android, которые поддерживает ваше приложение.
В примерах ниже в качестве стороннего SDK используется AppsFlyer. Замените или добавьте правила для других SDK, которые используются в вашем приложении.
Для Android 12 и выше (используется новый формат правил извлечения данных):
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</device-transfer>
</data-extraction-rules>
Для Android 11 и ниже (используется устаревший формат полного резервного копирования):
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
В Unity применяйте эти изменения к файлу Assets/Plugins/Android/AndroidManifest.xml, а файлы правил резервного копирования создавайте в директории Assets/Plugins/Android/res/xml/.
Покупки завершаются ошибкой после возврата из другого приложения на Android
Если Activity, инициирующий покупку, использует нестандартный launchMode, Android может некорректно пересоздать или переиспользовать его при возврате пользователя из Google Play, банковского приложения или браузера. Это может привести к тому, что результат покупки будет утерян или воспринят как отмена.
Чтобы покупки работали корректно, используйте только режимы запуска standard или singleTop для Activity, из которой инициируется поток покупки, и избегайте любых других режимов.
В файле AndroidManifest.xml убедитесь, что для Activity, из которой запускается поток покупки, установлен режим standard или singleTop:
<activity
android:name=".MainActivity"
android:launchMode="standard" />