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

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

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

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

Требования

Adapty Capacitor SDK поддерживает следующие версии:

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

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

Adapty совместим с Google Play Billing Library версий до 8.x включительно. По умолчанию Adapty работает с Google Play Billing Library v.7.0.0, но если вам нужна более поздняя версия, вы можете вручную добавить зависимость.

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

Установка Adapty SDK

Release

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

npm install @adapty/capacitor
npx cap sync   

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

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

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

  1. Откройте дашборд Adapty и перейдите в App settings → General.
  2. В разделе Api keys скопируйте Public SDK Key (не Secret Key).
  3. Замените "YOUR_PUBLIC_SDK_KEY" в коде на скопированный ключ.
  • Используйте Public SDK key для инициализации Adapty. Secret key предназначен только для серверного API.
  • SDK keys уникальны для каждого приложения, поэтому при наличии нескольких приложений убедитесь, что выбрали правильный ключ.

Скопируйте следующий код в любой файл приложения, чтобы активировать 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);
}

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

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

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

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

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

Логирование

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

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

УровеньОписание
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.

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

await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        ios: {
            clearDataOnBackup: 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
}

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

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

Если вы получаете ошибку минимальной версии iOS, обновите Podfile:

-platform :ios, min_ios_version_supported
+platform :ios, '14.0'  # For core features only
# OR
+platform :ios, '15.0'  # If using paywalls created in the paywall builder

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

    

После изменения нативных файлов 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" />