This repository demonstrates how to integrate the Adapty SDK into an existing React Native app built with Expo. It supports both local builds and EAS Cloud builds. It contains two branches:
starter: A “clean slate” version of the Focus Journal app with no Adapty code included. Use this branch to follow the Quickstart guide and add Adapty yourself.master: The fully integrated version, showing the completed Adapty integration for reference.
- Project Overview
- Branch Structure
- Prerequisites
- Getting Started
- Running Locally
- Running with EAS Build
Focus Journal is a simple journaling app that lets users log daily entries and view their history. In the “premium” flow, tapping “History” triggers a paywall if the user is not subscribed. The Adapty SDK is used to:
- Activate Adapty at launch
- Fetch the user’s profile and determine access
- Display a customizable paywall UI using Paywall Builder
- Handle purchase and restore callbacks
You can follow along on the feat/focus-journal-expo-starter branch to add Adapty manually, or inspect the master branch to see the final result.
You can also follow along with the video tutorial:
-
feat/focus-journal-expo-starter- Contains the Focus Journal app without any Adapty code.
- Meant as a starting point for following the Quickstart guide.
-
master- Contains the same app with Adapty fully integrated.
- Compare this branch to
starterto see the complete implementation.
Note: This app requires a custom development build. Expo Go will not work because the Adapty SDK includes native dependencies.
- Node.js (version 20 or higher)
- A valid Adapty account with an SDK key
- At least one in-app purchase configured in App Store Connect (iOS) or Google Play Console (Android) and synced to Adapty
- Physical device is recommended for testing in-app purchases
- Xcode
- Android Studio
- EAS CLI
- An Expo account
-
Clone this repository
git clone https://github.com/adaptyteam/AdaptySDK-React-Native.git cd examples/FocusJournalExpo -
Check out the starter branch
git checkout feat/focus-journal-expo-starter
-
Follow the Quickstart Integration Guide to add Adapty step-by-step.
-
When you're done, or if you get stuck, switch to the
masterbranch to compare your work:git checkout master
To test in-app purchases with your own Apple/Google accounts, you need to configure your own app bundle identifier and package name:
-
Install dependencies:
git checkout master npm install
-
Update
app.jsonwith your own identifiers:{ "expo": { "ios": { "bundleIdentifier": "com.yourcompany.focusjournal" }, "android": { "package": "com.yourcompany.focusjournal" } } } -
Regenerate native projects with the new identifiers:
npx expo prebuild --clean
-
Add your Adapty API key and PLACEMENT_ID to
adaptyCredentials.js:export default { API_KEY: "public_live_YOUR_KEY_HERE", ACCESS_LEVEL_ID: "premium", PLACEMENT_ID: "your_placement_id", };
-
Run the app locally using npm scripts:
# For iOS npm run ios:preview # For Android npm run android:preview
These commands will build and launch the app with bundled JavaScript on your device or simulator/emulator. No need to run the Metro bundler separately.
Note: You'll need the products, placements, and paywalls already defined in your Adapty dashboard. See the Adapty docs for help.
You should now have a working Adapty integration in a React Native app using Expo. Feel free to explore the master branch to see the completed integration or continue customizing the UI.
Follow steps 1-4 from Running Locally section, then:
-
Configure EAS Build (if not done yet):
Follow the official EAS Build setup guide to install EAS CLI, login and registered iOS devices.
-
Build your dev client with EAS:
# Build for iOS eas build --profile development --platform ios # Build for Android eas build --profile development --platform android
Once the build completes, install it on your device or simulator.
-
Start the dev client:
npx expo start --dev-client
If you find any mistakes or have questions, please open an issue or submit a pull request. Happy coding!


