Установка и настройка Adapty React Native SDK в проекте Expo

Это руководство посвящено установке и настройке Adapty React Native SDK в проекте Expo.

Если вы используете чистый React Native (без Expo), воспользуйтесь руководством по установке для React Native.

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

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

Если вам нужен полный туториал по реализации встроенных покупок в React Native-приложении, ознакомьтесь с этим материалом.

Хотите увидеть реальный пример интеграции Adapty SDK в приложение на Expo? Посмотрите наши примеры:

Для полного пошагового руководства по реализации вы также можете посмотреть видео:

Требования

Adapty React Native SDK поддерживает iOS 13.0+, однако для использования пейволов, созданных в Adapty Paywall Builder, требуется iOS 15.0+.

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

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

Установка Adapty SDK

Release

Для использования Adapty в проекте Expo необходим Expo Dev Client (кастомная сборка для разработки).

Expo Go не поддерживает кастомные нативные модули, поэтому с ним можно работать только в режиме мока — для разработки UI/логики (без реальных покупок и без рендеринга AdaptyUI/Paywall Builder).

  1. Установите Adapty SDK (при этом автоматически устанавливается @adapty/core):

    npx expo install react-native-adapty
    npx expo prebuild
  2. Соберите приложение для разработки с помощью EAS или локальной сборки:

  3. Запустите сервер разработки:

    npx expo start --dev-client

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

Скопируйте следующий код в App.tsx для активации Adapty:


adapty.activate('YOUR_PUBLIC_SDK_KEY');

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

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

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

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

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

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

Логирование

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

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

УровеньОписание
errorБудут логироваться только ошибки
warnБудут логироваться ошибки и сообщения от SDK, которые не вызывают критических ошибок, но заслуживают внимания
infoБудут логироваться ошибки, предупреждения и различные информационные сообщения
verboseБудет логироваться любая дополнительная информация, которая может быть полезна при отладке: вызовы функций, API-запросы и т. д.
Вы можете установить уровень логирования в приложении до или во время настройки Adapty:
// Set log level before activation
// 'verbose' is recommended for development and the first production release
adapty.setLogLevel('verbose');

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

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

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

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

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

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

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

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

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

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

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

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

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

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  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:

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

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

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

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

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

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

Настройте mock-режим для Expo Go / Expo Web

В средах Expo Go и Expo Web нет доступа к нативным модулям Adapty. Чтобы избежать ошибок во время выполнения и при этом иметь возможность собирать и тестировать UI приложения и логику пейволов, Adapty предоставляет mock-режим.

Mock-режим — это не инструмент для тестирования реальных покупок:

  • Он не открывает флоу покупок App Store / Google Play и не создаёт реальных транзакций.
  • Он не рендерит пейволы/онбординги, созданные в Adapty Paywall Builder (AdaptyUI).
  • Нативные модули Adapty полностью обходятся — даже отсутствующие нативные файлы SDK в сборке Xcode/Android или неверный API-ключ не вызовут ошибок.

Чтобы тестировать реальные покупки и пейволы Paywall Builder, используйте Expo Dev Client или продакшн-сборку, где mock-режим отключён автоматически.

По умолчанию SDK автоматически определяет среды Expo Go и web и включает режим мока. Настраивать ничего не нужно — только если хотите изменить моковые данные.

Когда режим мока активен:

  • Все методы Adapty возвращают моковые данные, не обращаясь к серверам Adapty.
  • По умолчанию начальный моковый профиль не имеет активных подписок.
  • По умолчанию makePurchase(...) симулирует успешную покупку и предоставляет премиум-доступ. Вы можете настроить мок-данные с помощью mockConfig при активации. Формат конфигурации и поддерживаемые параметры описаны здесь.

try {
  await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
    mockConfig: {
      // Customize the initial mock profile (optional)
    },
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}

Если вам нужно вызвать методы SDK до активации (например, isActivated() или setLogLevel()), используйте enableMock() перед activate(). Если мост уже инициализирован, этот метод ничего не делает.


adapty.enableMock(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

Отложить активацию SDK для целей разработки

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

Однако в симуляторе iOS это может создавать неудобства: во время разработки симулятор часто запрашивает аутентификацию. Adapty не может управлять флоу аутентификации StoreKit, но может откладывать запросы SDK на получение свежих данных пользователя.

Если включить свойство __debugDeferActivation, вызов активации будет удерживаться до следующего обращения к Adapty SDK. Это позволяет избежать лишних запросов аутентификационных данных, когда они не нужны. Важно учитывать, что эта функция предназначена только для разработки, так как не охватывает все возможные пользовательские сценарии. В продакшене не стоит откладывать активацию, поскольку реальные устройства обычно запоминают данные аутентификации и не запрашивают учётные данные повторно.

Рекомендуемый подход к использованию:

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' из любой сторонней библиотеки
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Обработайте ошибку подходящим для вашего приложения способом
}

Устранение ошибок активации SDK при Fast Refresh в React Native

При разработке с Adapty SDK в React Native вы можете столкнуться с ошибкой: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once. Это происходит из-за того, что функция быстрого обновления (fast refresh) в React Native вызывает несколько активаций в процессе разработки. Чтобы этого избежать, используйте опцию __ignoreActivationOnFastRefresh со значением __DEV__ (флаг режима разработки в React Native).

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__,
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

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

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

При сборке под iOS может появиться ошибка о минимальной версии iOS или цели развёртывания, особенно если вы используете пейволы, созданные в Adapty Paywall Builder, которые требуют iOS 15.0+.

Поскольку Expo генерирует iOS-проект (включая Podfile) во время выполнения expo prebuild, не редактируйте Podfile напрямую. Вместо этого настройте цель развёртывания через конфиг-плагин expo-build-properties.

  1. Установите плагин:
  2. npx expo install expo-build-properties
  3. Обновите конфиг Expo (app.json или app.config.js), указав минимальную версию iOS:
{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Use "13.0" for core Adapty features only,
                        // or "15.0" if you use paywalls created in the paywall builder.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
  1. Пересоздайте нативный iOS-проект и пересоберите приложение:
npx expo prebuild --clean
npx expo run:ios      # или `eas build -p ios` на вашем CI

Конфликт манифеста Android Auto Backup

При использовании Expo с несколькими SDK, которые настраивают Android Auto Backup (например, Adapty, AppsFlyer или expo-secure-store), может возникнуть конфликт слияния манифестов.

Типичная ошибка выглядит так: Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306 is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules). Чтобы разрешить этот конфликт, нужно позволить плагину Adapty управлять настройками резервного копирования Android. Если ваш проект также использует expo-secure-store, отключите его собственную настройку резервного копирования, чтобы избежать конфликтов.

Вот как настроить app.json:

{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}

Опция replaceAndroidBackupConfig по умолчанию имеет значение false. Если её включить, плагин Adapty возьмёт на себя управление правилами резервного копирования Android. Добавьте "configureAndroidBackup": false, если используете expo-secure-store, — это предотвратит предупреждения, поскольку конфигурацией резервного копирования SecureStore теперь будет управлять Adapty.

Эта настройка учитывает требования к резервному копированию только для Adapty, AppsFlyer и expo-secure-store. Если другие библиотеки в вашем проекте определяют собственные правила резервного копирования, их нужно настроить вручную.