We support Expo 49+ but recommend Expo 53+.
1. Install the SDK
Expo users: Helium uses native code, so you must use a development build. Expo Go will not work.
2. Initialize Helium
Callinitialize early in your app’s lifecycle, typically in your root component. Your API key is available in the Helium dashboard → Profile.
3. Show a Paywall
Before callingpresentUpsell, make sure you have a trigger and workflow configured in the Helium dashboard.
Recommended Setup
The following steps are optional but strongly recommended for production apps.Identify Users
User identification is optional. It improves targeting accuracy and event attribution in external analytics. Set user identity duringinitialize for consistency from the first session.
Paywall Events
Helium emits events throughout the paywall lifecycle. You can handle them per-presentation or globally.Per-presentation handlers
PasseventHandlers to presentUpsell:
Global event listener
PassonHeliumPaywallEvent to initialize to handle events across all paywalls without passing handlers at each call site:
Fallback Paywalls
Set up fallbacks to handle the rare case where a paywall fails to load. This is strongly recommended before going to production. Follow the fallback bundle guide once you have a production paywall ready.Checking Entitlements
Check entitlement status before showing a paywall to avoid showing it to users who are already subscribed.All Entitlement Methods
All Entitlement Methods
Advanced
RevenueCat Integration
By default, Helium manages purchases directly. If you’re already using RevenueCat, passcreateRevenueCatPurchaseConfig to initialize to keep RevenueCat in control.
Make sure RevenueCat is installed (Expo · React Native) and initialized via Purchases.configure() before calling Helium.initialize.
Keeping appUserID in sync
If you change the RevenueCatappUserID, sync the value to Helium:
Custom Purchase Handling
By default, Helium handles purchases for you. This section is for apps that need custom purchase logic. PasscreateCustomPurchaseConfig to initialize:
makePurchase must return one of the following statuses:
Additional Methods
Reset Helium
Reset Helium
Resets Helium so
initialize can be called again. Useful after changing user traits that affect paywall targeting.Troubleshooting
Verify the package is installed
Verify the native pod is installed
Podfile.lock, regenerate the native directories and rebuild: