Установка и настройка Android SDK

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

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

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

Требования

Минимальная версия SDK: minSdkVersion 21

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

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

Установка Adapty SDK

Выберите способ подключения зависимостей:

  • Стандартный Gradle: добавьте зависимости в build.gradle уровня модуля
  • Если в вашем проекте используются файлы .gradle.kts, добавьте зависимости в build.gradle.kts уровня модуля
  • Если вы используете version catalogs, добавьте зависимости в файл libs.versions.toml, а затем сослайтесь на них в build.gradle.kts

Release

Если зависимость не резолвится, убедитесь, что в ваших Gradle-скриптах есть mavenCentral().

Инструкция по добавлению

Если в вашем settings.gradle нет dependencyResolutionManagement, добавьте следующее в конец блока repositories в build.gradle верхнего уровня:

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

В противном случае добавьте следующее в settings.gradle в блок repositories секции dependencyResolutionManagement:

dependencyResolutionManagement {
    ...
    repositories {
        ...
        mavenCentral()
    }
}

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

Базовая настройка

Активируйте 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 уникальны для каждого приложения, поэтому при наличии нескольких приложений убедитесь, что выбрали правильный ключ.

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

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

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

Настройка Proguard

Перед выпуском приложения в продакшн добавьте -keep class com.adapty.** { *; } в вашу конфигурацию Proguard.

Дополнительная настройка

Логирование

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

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

УровеньОписание
AdaptyLogLevel.NONEНичего не логируется. Значение по умолчанию
AdaptyLogLevel.ERRORЛогируются только ошибки
AdaptyLogLevel.WARNЛогируются ошибки и сообщения от SDK, которые не вызывают критических ошибок, но заслуживают внимания
AdaptyLogLevel.INFOЛогируются ошибки, предупреждения и различные информационные сообщения
AdaptyLogLevel.VERBOSEЛогируется любая дополнительная информация, которая может быть полезна при отладке: вызовы функций, API-запросы и т.д.

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

Перенаправление сообщений системы логирования

Если вам по какой-то причине нужно отправлять сообщения от Adapty в вашу систему или сохранять их в файл, можно переопределить поведение по умолчанию:

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

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

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

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

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

Отключение сбора и передачи рекламного ID (Ad ID)

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

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

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

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

Используйте AdaptyUI.configureMediaCache, чтобы переопределить размер кэша и срок его хранения. Это необязательно — если метод не вызывать, будут использоваться значения по умолчанию (100 МБ на диске, срок хранения — 7 дней).

Параметры:

ПараметрОбязательностьОписание
diskStorageSizeLimitнеобязательныйОбщий размер кэша на диске в байтах. По умолчанию — 100 МБ.
diskCacheValidityTimeнеобязательныйВремя, в течение которого кэшированные файлы считаются актуальными. По умолчанию — 7 дней.

Вы можете очистить медиакэш в рантайме с помощью AdaptyUI.clearMediaCache(strategy), где strategy может быть CLEAR_ALL или CLEAR_EXPIRED_ONLY.

Установка обфусцированных идентификаторов аккаунта

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

Установка этих идентификаторов может потребоваться, если ваше приложение работает с чувствительными пользовательскими данными или вы обязаны соблюдать определённые требования конфиденциальности. Обфусцированные идентификаторы позволяют Google Play отслеживать покупки, не раскрывая реальные данные пользователей.

Запуск Adapty в отдельном процессе

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

Если нужно запустить Adapty в другом процессе, укажите его в конфигурации:

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

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

По умолчанию локальные уровни доступа на Android отключены. Чтобы включить их, установите withLocalAccessLevelAllowed в 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/sample_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)

Чтобы решить проблему, нужно:

  • Указать инструменту слияния манифестов использовать значения вашего приложения для атрибутов, связанных с резервным копированием.

  • Объединить правила резервного копирования Adapty и других SDK в единый XML-файл (или пару файлов для Android 12+).

1. Добавьте пространство имён tools в манифест

Если оно ещё не добавлено, добавьте пространство имён tools в корневой тег <manifest>:

<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-файлы в папке app/src/main/res/xml/, объединив правила 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"/>

</full-backup-content>

После этой настройки:

  • Исключения резервного копирования Adapty (AdaptySDKPrefs.xml) сохраняются.

  • Исключения других SDK (например, appsflyer-data) также применяются.

  • При слиянии манифестов используется конфигурация вашего приложения, и ошибок из-за конфликтующих атрибутов резервного копирования больше не возникает.

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

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

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

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

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