Capacitor — установка и настройка Adapty SDK

SDK Adapty включает два ключевых модуля для интеграции в ваше Capacitor-приложение:

  • Core Adapty: Этот модуль обязателен для работы Adapty в вашем приложении.
  • AdaptyUI: Этот модуль отображает флоу, а также пейволы старого билдера. AdaptyUI активируется автоматически вместе с основным модулем.
Tip

Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку, включая отображение пейволов, совершение покупок и другую базовую функциональность.

Требования

Adapty Capacitor SDK предъявляет следующие требования к версиям:

Версия Adapty SDKВерсия CapacitorВерсия iOS
4.1+815.0+
3.16.0+815.0+
3.15714.0+

Capacitor версий 6 и ниже не поддерживается.

Для сборки под iOS требуется Xcode 26 или новее — нативный iOS SDK собирается с инструментами Swift 6.2. На Android минимальная версия SDK — 24.

Info

Adapty Capacitor SDK работает с Google Play Billing Library v8.

Совместимость с версией Billing Library не означает, что Adapty поддерживает все функции, которые Google добавила в неё. Прежде чем использовать новую возможность Google Play Billing, ознакомьтесь с разделом Продукт в Play Store.

Info

Установка SDK — это шаг 5 настройки Adapty. Прежде чем покупки заработают в вашем приложении, вам также нужно подключить приложение к сторам, а затем создать продукты, пейвол и плейсмент в дашборде Adapty. Гайд по быстрому старту описывает все необходимые шаги.

Установите Adapty SDK

Release

Установите Adapty SDK:

npm install @adapty/capacitor
npx cap sync

На iOS Adapty SDK подключает нативные SDK через Swift Package Manager — подддержка CocoaPods была удалена (репозиторий спецификаций CocoaPods переходит в режим только для чтения в декабре 2026 года). iOS-проект вашего приложения должен использовать интеграцию Capacitor с SPM:

Обновляетесь с v3? Ознакомьтесь с руководством по миграции Adapty Capacitor SDK на v4.1 — там приведён полный список изменений API.

Активация модуля Adapty в SDK Adapty

Note

SDK Adapty нужно активировать в приложении только один раз.

Чтобы получить Public SDK Key:

  1. Откройте дашборд Adapty и перейдите в App settings → General.
  2. В разделе Api keys скопируйте Public SDK Key (НЕ Secret Key).
  3. Замените "YOUR_PUBLIC_SDK_KEY" в коде.

Или получите его программно с помощью Adapty CLI:

npm install -g adapty
adapty auth login
adapty apps list

Или напрямую:

npx adapty auth login
adapty apps list
  • Убедитесь, что для инициализации Adapty вы используете Public SDK keySecret key предназначен только для серверного API.
  • SDK-ключи уникальны для каждого приложения, поэтому если у вас несколько приложений, выберите нужный ключ.

Скопируйте следующий код в любой файл приложения для активации Adapty:


try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
      // verbose logging is recommended for the development purposes and for the first production release
        logLevel: 'verbose',
      // in the development environment, use this variable to avoid multiple activation errors. Set it to your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
  console.log('Adapty activated successfully!');
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}
Important

Дождитесь завершения activate перед вызовом любых других методов Adapty SDK. Смотрите Порядок вызовов в Capacitor SDK для полной последовательности.

Tip

Чтобы избежать ошибок активации в среде разработки, воспользуйтесь советами.

Теперь настройте пейволы в вашем приложении:

Активация модуля AdaptyUI в Adapty SDK

Если вы планируете использовать Flow & Paywall Builder, вам понадобится модуль AdaptyUI. Он активируется автоматически при активации основного модуля — никаких дополнительных действий не требуется.

Опциональная настройка

Логирование

Настройка системы логирования

Adapty записывает ошибки и другую важную информацию, чтобы вы понимали, что происходит. Доступны следующие уровни логирования:

LevelDescription
errorБудут записываться только ошибки
warnБудут записываться ошибки и сообщения от SDK, которые не вызывают критических ошибок, но заслуживают внимания
infoБудут записываться ошибки, предупреждения и различные информационные сообщения
verboseБудет записываться любая дополнительная информация, которая может быть полезна при отладке: вызовы функций, запросы к API и т. д.

Вы можете установить уровень логирования в приложении до или во время конфигурации Adapty:

// Set log level before activation
adapty.setLogLevel({ logLevel: 'verbose' });

// Or set it during configuration
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    logLevel: 'verbose',
  }
});

Политики обработки данных

Adapty не хранит персональные данные ваших пользователей, если вы явно их не передаёте, но вы можете настроить дополнительные политики безопасности данных в соответствии с требованиями стора или законодательства конкретной страны.

Отключение сбора и передачи IP-адресов

При активации модуля Adapty установите ipAddressCollectionDisabled в значение true, чтобы отключить сбор и передачу IP-адресов пользователей. Значение по умолчанию — false.

Используйте этот параметр для защиты конфиденциальности пользователей, соблюдения региональных требований по защите данных (например, GDPR или CCPA) или уменьшения объёма собираемых данных, если функции на основе IP-адреса не нужны вашему приложению.

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    ipAddressCollectionDisabled: true,
  }
});

Отключение сбора и передачи рекламного идентификатора

При активации модуля Adapty установите ios.idfaCollectionDisabled (iOS) или android.adIdCollectionDisabled (Android) в значение true, чтобы отключить сбор рекламных идентификаторов. По умолчанию используется значение false.

Используйте этот параметр для соответствия политикам App Store/Play Store, чтобы не вызывать запрос App Tracking Transparency, или если ваше приложение не использует рекламную атрибуцию или аналитику на основе рекламных идентификаторов.

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    ios: {
      idfaCollectionDisabled: true,
    },
    android: {
      adIdCollectionDisabled: true,
    },
  }
});

Настройка конфигурации кэша медиа для AdaptyUI

По умолчанию AdaptyUI кэширует медиафайлы (изображения и видео) для повышения производительности и снижения нагрузки на сеть. Вы можете настроить параметры кэша, предоставив собственную конфигурацию.

Используйте mediaCache для переопределения настроек кэша по умолчанию:

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    mediaCache: {
      memoryStorageTotalCostLimit: 200 * 1024 * 1024, // Optional: memory cache size in bytes
      memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
      diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
    },
  }
});
ПараметрОбязательныйОписание
memoryStorageTotalCostLimitнетОбщий размер кэша в памяти в байтах. По умолчанию используется платформенное значение.
memoryStorageCountLimitнетМаксимальное количество элементов в памяти. По умолчанию используется платформенное значение.
diskStorageSizeLimitнетМаксимальный размер файла на диске в байтах. По умолчанию используется платформенное значение.

Включение локальных уровней доступа (Android)

По умолчанию локальные уровни доступа включены на iOS и отключены на Android. Чтобы включить их и на Android, установите localAccessLevelAllowed в true:

await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        android: {
            localAccessLevelAllowed: true,
        },
    }
});

Очистка данных при восстановлении из резервной копии

Если для clearDataOnBackup установлено значение true, SDK определяет, что приложение было восстановлено из резервной копии iCloud, и удаляет все локально сохранённые данные SDK, включая кэшированную информацию профиля, сведения о продуктах и пейволах. После этого SDK инициализируется с чистого состояния. Значение по умолчанию — false.

Note

Удаляется только локальный кэш SDK. История транзакций в Apple и данные пользователей на серверах Adapty остаются без изменений.

await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        ios: {
            clearDataOnBackup: true,
        },
    }
});

Включение Adapty Attribution

Info

Этот параметр доступен начиная с версии SDK 4.1.

Если вы используете Adapty Attribution, при активации SDK установите adaptyAttributionEnabled в значение true. По умолчанию используется false: без этого параметра SDK не регистрирует установки и не передаёт данные об инсталляции в ваше приложение. В версиях SDK ниже 4.1 Adapty Attribution включается автоматически.

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    adaptyAttributionEnabled: true,
  }
});

Советы по среде разработки

Устранение ошибок активации SDK при live-reload в Capacitor

При разработке с Adapty SDK в Capacitor вы можете столкнуться с ошибкой: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.

Она возникает из-за того, что функция live-reload в Capacitor инициирует несколько вызовов активации в процессе разработки. Чтобы этого избежать, используйте опцию __ignoreActivationOnFastRefresh, установив её в флаг режима разработки Capacitor — он будет отличаться в зависимости от используемого бандла.

try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        // Set your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}
Note

При включённой опции SDK пропускает вызов активации, если уже был активирован, поэтому изменения параметров активации не вступают в силу при горячей перезагрузке. Чтобы применить новые параметры активации, полностью закройте приложение и запустите его заново.

Устранение неполадок

Ошибка минимальной версии iOS

Note

Это касается проектов на CocoaPods с SDK 3.x. SDK 4 устанавливается на iOS через Swift Package Manager (файл Podfile не используется) и требует iOS 15.0 — установите deployment target 15.0 в Xcode.

Если при использовании SDK 3.x возникает ошибка минимальной версии iOS, обновите Podfile:

-platform :ios, min_ios_version_supported
+platform :ios, '15.0'

Правила резервного копирования 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)

Note

Эти изменения нужно вносить в директории 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, которые поддерживает ваше приложение.

Note

В приведённых примерах в качестве стороннего 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"/>

    

Tip

После изменения нативных Android-файлов выполните npx cap sync android, чтобы Capacitor подхватил обновлённые ресурсы при повторной генерации платформы.

Покупки завершаются с ошибкой после возврата из другого приложения на Android

Если Activity, запускающий флоу покупки, использует нестандартный launchMode, Android может некорректно пересоздать или повторно использовать его при возврате пользователя из Google Play, банковского приложения или браузера. Это может привести к тому, что результат покупки будет потерян или воспринят как отмена.

Чтобы покупки работали корректно, используйте только режимы запуска standard или singleTop для Activity, из которой запускается флоу покупки, и избегайте любых других режимов.

В файле AndroidManifest.xml убедитесь, что для Activity, запускающей флоу покупки, задан режим standard или singleTop:

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />

Ошибки сборки Swift 6, вызванные переопределением SWIFT_VERSION в Podfile

Note

Это касается проектов на основе CocoaPods с SDK 3.x. SDK 4 устанавливает нативные SDK через Swift Package Manager, поэтому файл Podfile изменять не нужно.

При сборке приложения Capacitor для iOS могут возникать ошибки компиляции Swift 6 в pod-таргетах Adapty. Типичные симптомы: несоответствия @Sendable в AdaptyUIBuilderLogic, отсутствие соответствия Sendable для типов Adapty или ошибки изоляции акторов.

Поды Adapty объявляют s.swift_version = '6.0' и требуют Swift 6 для сборки. Ваш собственный код приложения может оставаться на Swift 5 — только целевые поды Adapty (Adapty, AdaptyUI, AdaptyUIBuilder, AdaptyLogger, AdaptyPlugin) должны собираться с Swift 6.

Наиболее распространённая причина — хук post_install в ios/App/Podfile, который перезаписывает SWIFT_VERSION для каждого пода:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Исправление: Исключите pod-таргеты Adapty из переопределения:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger AdaptyPlugin].include?(target.name)
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Затем выполните npx cap sync ios и пересоберите проект.

Чтобы проверить результат, откройте ios/App/Pods/Pods.xcodeproj, выберите таргет пода AdaptyBuild SettingsSwift Language Version. Там должно быть указано Swift 6.