Установка и настройка Adapty React Native SDK в проекте Expo
Этот гайд описывает установку и настройку SDK Adapty для React Native в проекте Expo.
Если вы используете чистый React Native (без Expo), следуйте руководству по установке для React Native.
SDK Adapty включает два ключевых модуля для бесшовной интеграции в ваше React Native-приложение:
- Core Adapty: Этот модуль необходим для корректной работы Adapty в вашем приложении.
- AdaptyUI: Этот модуль нужен, если вы используете Adapty Paywall Builder — удобный no-code инструмент для создания кросс-платформенных пейволов. AdaptyUI активируется автоматически вместе с основным модулем.
Если вы хотите ознакомиться с полным руководством по реализации встроенных покупок в приложении на React Native, загляните сюда.
Хотите увидеть реальный пример интеграции Adapty SDK в приложение на Expo? Посмотрите наши примеры:
- Пример сборки Expo dev build — полная функциональность, включая реальные покупки и Paywall Builder
- Пример Expo Go & Web — тестирование в режиме мока
Полное руководство по реализации также доступно в видео:
Требования
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
Для использования Adapty в проекте Expo необходим Expo Dev Client (кастомная сборка для разработки).
Expo Go не поддерживает кастомные нативные модули, поэтому его можно использовать только в режиме mock для разработки UI/логики (без реальных покупок и без рендеринга AdaptyUI/Paywall Builder).
-
Установите Adapty SDK (вместе с ним автоматически установится
@adapty/core):npx expo install react-native-adapty npx expo prebuild -
Соберите приложение для разработки с помощью EAS или локальной сборки:
-
Запустите сервер разработки:
npx expo start --dev-client
Активация модуля 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 уникальны для каждого приложения, поэтому при наличии нескольких приложений убедитесь, что выбрали правильный ключ.
Скопируйте следующий код в App.tsx, чтобы активировать Adapty:
adapty.activate('YOUR_PUBLIC_SDK_KEY');
Дождитесь завершения activate, прежде чем вызывать другие методы Adapty SDK. Полная последовательность вызовов описана в разделе Порядок вызовов в React Native SDK.
Теперь настройте пейволы в вашем приложении:
- Если вы используете Adapty Paywall Builder, следуйте быстрому старту с Paywall Builder.
- Если вы создаёте собственный интерфейс пейвола, смотрите быстрый старт для кастомных пейволов.
Чтобы избежать ошибок активации в среде разработки, воспользуйтесь советами.
Активация модуля 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 mode для Expo Go / Expo Web
Expo Go и Expo Web не имеют доступа к нативным модулям Adapty. Чтобы избежать ошибок в рантайме и при этом иметь возможность собирать и тестировать UI приложения и логику пейволов, Adapty предоставляет mock mode.
Mock mode — это не инструмент для тестирования реальных покупок:
- Он не открывает экраны покупок 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(...)симулирует успешную покупку и предоставляет премиум-доступ. Вы можете настроить mock-данные с помощью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' from any 3rd party library
});
} catch (error) {
console.error('Failed to activate Adapty SDK:', error);
// Handle the error appropriately for your app
}
Устранение ошибок активации 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 или deployment target — особенно если вы используете пейволы, созданные в Adapty Paywall Builder, которые требуют iOS 15.0+.
Поскольку Expo генерирует iOS-проект (включая Podfile) во время expo prebuild, не редактируйте Podfile напрямую. Вместо этого настройте deployment target через конфиг-плагин expo-build-properties.
- Установите плагин:
-
npx expo install expo-build-properties - Обновите конфиг Expo (
app.jsonилиapp.config.js), чтобы задать iOS deployment target:
{
"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"
}
}
],
]
}
}
- Пересоздайте нативный 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.
Если вы используете expo-secure-store, добавьте "configureAndroidBackup": false, чтобы избежать предупреждений — настройка резервного копирования SecureStore теперь будет выполняться Adapty.
Эта настройка учитывает требования к резервному копированию только для Adapty, AppsFlyer и expo-secure-store. Если другие библиотеки в вашем проекте определяют собственные правила резервного копирования, вам потребуется настроить их вручную.