Установка и настройка 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 активируется автоматически вместе с основным модулем.
Если вам нужен полный туториал по реализации IAP в React Native-приложении, загляните сюда.
Хотите увидеть реальный пример интеграции Adapty SDK в Expo-приложение? Посмотрите наши примеры:
- Пример сборки Expo Dev Build — с полным функционалом: реальные покупки и Paywall Builder
- Пример Expo Go & Web — для тестирования в режиме mock
Полный разбор реализации также доступен в видео:
Требования
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 (кастомная dev-сборка).
Expo Go не поддерживает кастомные нативные модули, поэтому в нём можно использовать только режим mock для разработки UI/логики (без реальных покупок и без рендеринга AdaptyUI/Paywall Builder).
-
Установите Adapty SDK (это также автоматически установит
@adapty/core):npx expo install react-native-adapty npx expo prebuild -
Соберите приложение для разработки с помощью EAS или локальной сборки:
-
Запустите dev-сервер:
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');
Чтобы избежать ошибок активации в среде разработки, воспользуйтесь советами.
Теперь настройте пейволы в вашем приложении:
- Если вы используете Adapty Paywall Builder, следуйте быстрому старту с Paywall Builder.
- Если вы создаёте собственный UI для пейвола, смотрите быстрый старт для кастомных пейволов.
Активация модуля 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 и веб-среду и включает режим mock. Никакой дополнительной настройки не требуется, если вы не хотите изменить mock-данные.
Когда режим mock активен:
- Все методы Adapty возвращают mock-данные без сетевых запросов к серверам Adapty.
- По умолчанию исходный mock-профиль не имеет активных подписок.
- По умолчанию
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, но может отложить запросы на получение актуальных данных пользователя.
Если включить свойство __debugDeferActivation, вызов activate будет заморожен до следующего обращения к 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 через config plugin expo-build-properties.
-
Установите плагин:
npx expo install expo-build-properties -
Обновите конфигурацию Expo (
app.jsonилиapp.config.js), указав deployment target для 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"
}
}
],
]
}
}
- Пересоздайте нативный iOS-проект и выполните сборку заново:
npx expo prebuild --clean
npx expo run:ios # or `eas build -p ios` on your 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. При включении она передаёт управление правилами резервного копирования Android плагину Adapty.
Укажите "configureAndroidBackup": false, если используете expo-secure-store, чтобы избежать предупреждений — конфигурацией резервного копирования SecureStore теперь будет управлять Adapty.
Эта настройка учитывает требования к резервному копированию только для Adapty, AppsFlyer и expo-secure-store. Если другие библиотеки в вашем проекте определяют собственные правила резервного копирования, их нужно настроить вручную.