Install & configure React Native SDK
Adapty SDK includes two key modules for seamless integration into your React Native app:
- Core Adapty: This module is required for Adapty to function properly in your app.
- AdaptyUI: This module is needed if you use the Adapty Paywall Builder, a user-friendly, no-code tool for easily creating cross-platform paywalls. AdaptyUI is automatically activated along with the core module.
If you need a full tutorial on how to implement IAP in your React Native app, check this out.
Want to see a real-world example of how Adapty SDK is integrated into a mobile app? Check out our sample apps, which demonstrate the full setup, including displaying paywalls, making purchases, and other basic functionality.
For a complete implementation walkthrough, you can also see the video:
Requirements
The Adapty React Native SDK supports iOS 13.0+, but using paywalls created in the Adapty paywall builder requires iOS 15.0+.
Adapty supports Google Play Billing Library up to 7.x. Support for Billing Library 8.0.0 (released 30 June, 2025) is planned.
Install Adapty SDK
- Expo
- Pure React Native
- Install EAS CLI (if not already):
Shell
npm install -g eas-cli
- Install the dev client:
Shell
expo install expo-dev-client
- Install Adapty SDK:
Shell
expo install react-native-adapty
- Build your app for development:
Shell
eas build --profile development --platform ios
eas build --profile development --platform android - Start the dev server:
Shell
expo start --dev-client
- Install Adapty SDK:
Shell
yarn add react-native-adapty
- For iOS, install pods:
Shell
cd ios && pod install
For Android, if your React Native version is earlier than 0.73.0 (click to expand)
Update the /android/build.gradle
file. Make sure there is the kotlin-gradle-plugin:1.8.0
dependency or a newer one:
...
buildscript {
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
...
Activate Adapty module of Adapty SDK
Copy the following code to App.tsx
to activate Adapty:
import { adapty } from 'react-native-adapty';
adapty.activate('YOUR_PUBLIC_SDK_KEY');
To avoid activation errors in the development environment, use the tips.
To get your Public SDK Key:
- Go to Adapty Dashboard and navigate to App settings → General.
- From the Api keys section, copy the Public SDK Key (NOT the Secret Key).
- Replace
"YOUR_PUBLIC_SDK_KEY"
in the code.
- Make sure you use the Public SDK key for Adapty initialization, the Secret key should be used for server-side API only.
- SDK keys are unique for every app, so if you have multiple apps make sure you choose the right one.
Activate AdaptyUI module of Adapty SDK
If you plan to use Paywall Builder, you need the AdaptyUI module. It is activated automatically when you activate the core module; you don't need to do anything else.
Optional setup
Logging
Set up the logging system
Adapty logs errors and other important information to help you understand what is going on. There are the following levels available:
Level | Description |
---|---|
error | Only errors will be logged |
warn | Errors and messages from the SDK that do not cause critical errors, but are worth paying attention to will be logged |
info | Errors, warnings, and various information messages will be logged |
verbose | Any additional information that may be useful during debugging, such as function calls, API queries, etc. will be logged |
You can set the log level in your app before or during Adapty configuration:
// 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',
});
Data policies
Adapty doesn't store personal data of your users unless you explicitly send it, but you can implement additional data security policies to comply with the store or country guidelines.
Disable IP address collection and sharing
When activating the Adapty module, set ipAddressCollectionDisabled
to true
to disable user IP address collection and sharing. The default value is false
.
Use this parameter to enhance user privacy, comply with regional data protection regulations (like GDPR or CCPA), or reduce unnecessary data collection when IP-based features aren't required for your app.
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ipAddressCollectionDisabled: true,
});
Disable advertising ID collection and sharing
When activating the Adapty module, set ios.idfaCollectionDisabled
(iOS) or android.adIdCollectionDisabled
(Android) to true
to disable the collection of advertising identifiers. The default value is false
.
Use this parameter to comply with App Store/Play Store policies, avoid triggering the App Tracking Transparency prompt, or if your app does not require advertising attribution or analytics based on advertising IDs.
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
ios: {
idfaCollectionDisabled: true,
},
android: {
adIdCollectionDisabled: true,
},
});
Set up media cache configuration for AdaptyUI
By default, AdaptyUI caches media (such as images and videos) to improve performance and reduce network usage. You can customize the cache settings by providing a custom configuration.
Use mediaCache
to override the default cache settings:
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
},
});
Parameters:
Parameter | Required | Description |
---|---|---|
memoryStorageTotalCostLimit | optional | Total cache size in memory in bytes. Defaults to platform-specific value. |
memoryStorageCountLimit | optional | The item count limit of the memory storage. Defaults to platform-specific value. |
diskStorageSizeLimit | optional | The file size limit on disk in bytes. Defaults to platform-specific value. |
Development environment tips
Delay SDK activation for development purposes
Adapty pre-fetches all necessary user data upon SDK activation, enabling faster access to fresh data.
However, this may pose a problem in the iOS simulator, which frequently prompts for authentication during development. Although Adapty cannot control the StoreKit authentication flow, it can defer the requests made by the SDK to obtain fresh user data.
By enabling the __debugDeferActivation
property, the activate call is held until you make the next Adapty SDK call. This prevents unnecessary prompts for authentication data if not needed.
It's important to note that this feature is intended for development use only, as it does not cover all potential user scenarios. In production, activation should not be delayed, as real devices typically remember authentication data and do not repeatedly prompt for credentials.
Here's the recommended approach for usage:
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
}
Troubleshoot SDK activation errors on React Native's Fast Refresh
When developing with the Adapty SDK in React Native, you may encounter the error: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.
This occurs because React Native's fast refresh feature triggers multiple activation calls during development. To prevent this, use the __ignoreActivationOnFastRefresh
option set to __DEV__
(React Native's development mode flag).
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
}
Troubleshooting
Minimum iOS version error
If you get a minimum iOS version error, update your Podfile:
-platform :ios, min_ios_version_supported
+platform :ios, '13.0' # For core features only
# OR
+platform :ios, '15.0' # If using paywalls created in the paywall builder