Skip to main content
Helium supports two SDK packages depending on your setup:
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

Call initialize 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 calling presentUpsell, make sure you have a trigger and workflow configured in the Helium dashboard.
PresentUpsellParams
type

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 during initialize 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

Pass eventHandlers to presentUpsell:

Global event listener

Pass onHeliumPaywallEvent to initialize to handle events across all paywalls without passing handlers at each call site:
You can also forward all events to an existing analytics provider.

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.

Advanced

RevenueCat Integration

By default, Helium manages purchases directly. If you’re already using RevenueCat, pass createRevenueCatPurchaseConfig 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 RevenueCat appUserID, 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. Pass createCustomPurchaseConfig to initialize:
makePurchase must return one of the following statuses:

Additional Methods

Resets Helium so initialize can be called again. Useful after changing user traits that affect paywall targeting.

Troubleshooting

Verify the package is installed

If not found, reinstall using the commands in Step 1.

Verify the native pod is installed

If Helium isn’t found in Podfile.lock, regenerate the native directories and rebuild: