Skip to main content
To get a better understanding of how paywalls are served, visit here.

Present a Paywall

Install the SDK

Install the SDK using your preferred package manager:
We support Expo 49+ but recommend using Helium with Expo 53+.
The Older Expo / Bare SDK supports iOS only.The Expo 52+ SDK supports both iOS and Android.

Initialize Helium

Find your API key here. If you do not have a Helium account set up yet, you can still integrate but will not be able to show a real paywall.
Initialize Helium by calling initialize() early in your app’s lifecycle, typically in your root component:

Show Your First Paywall 🎉

Set up a trigger and workflow in the dashboard to show your desired paywall. Create unique triggers for each location a paywall can show in your app! This provides more flexibility with paywall variation and experiments, allowing you to take full advantage of Helium.
Call presentUpsell wherever you want to show a full-screen paywall:
PresentUpsellParams
type
You should now be able to see Helium paywalls in your app! Well done! 🎉
Looking for alternative presentation methods? Check out the guide on Ways to Show a Paywall.

Recommended Setup

Here are some common additional steps that you may want to consider.

Identifying Users

Identifying users is optional but can help with targeting and when forwarding events to external analytics platforms. If you are not sure, you probably do not need to identify your users.
Identify users as early as you can to maximize consistency in metrics and targeting. Ideally in your initialize call!

Helium Events

Helium dispatches various events during paywall presentation and purchase flow. You can optionally handle these events in your mobile app. You can also configure Helium to forward them to your existing analytics provider.

PaywallEventHandlers

When displaying a paywall you can pass in event handlers to listen for select events:

Global Event Listener

You can also listen for all Helium events globally by passing onHeliumPaywallEvent to initialize:

Fallback Paywalls

It is highly recommended that you set up “fallbacks” to handle the rare case when a paywall fails to display. Please follow this guide to do so.
Do this after you have a paywall created that you want to use in production.

Checking Subscription Status & Entitlements

Helium checks entitlements directly through the underlying app store (StoreKit on iOS, Google Play Billing on Android) and provides helper methods to make this easier. Consider checking entitlements to gate premium features.
If you have a backend server that manages user entitlements, you may have no use for these helpers.
If you want to check entitlement status before presenting a paywall, here are a couple of ways to do so.
For paywalls that are user-initiated (e.g. “Upgrade to Premium”) and onboarding paywalls, checking entitled status is not recommended. Apps usually want to consistently show a paywall for these locations, and users can still “Restore Purchases” as needed.

Advanced

RevenueCat

By default, Helium will handle purchases for you! This section is typically for users who already use RevenueCat in their app.
Helium integrates seamlessly with RevenueCat so you can continue to let RevenueCat handle your purchases and entitlements.
If you haven’t already, make sure to install RevenueCat (for non-Expo see here).Make sure to initialize RevenueCat (Purchases.configure()) before initializing Helium.
Configure Helium to use RevenueCat by passing createRevenueCatPurchaseConfig to initialize:

RevenueCat appUserID

If you ever change the appUserID of a user, keep Helium in sync with:

Custom Purchase Handling

By default, Helium will handle purchases for you! This section is for those who want to implement custom purchase logic.
Pass a custom purchase config to initialize:

Additional Features

For the full public API and detailed parameter documentation, see the inline docstrings in the SDK source. Import Helium in your project and use your IDE’s autocomplete or jump-to-definition to explore all available methods and types.
You can programmatically hide paywalls using:
Reset Helium entirely so you can call initialize again, for example after changing user traits that can affect the paywalls a user might see via targeting.

Expo Development Build

Please note that the Helium SDK uses native code, so you must create a development build. A common command to run for this is:

Troubleshooting

Check if the Helium SDK is installed

If the package is not found, install it again:

Check if Helium is properly installed

To verify that the Helium pod is correctly installed in your project, run:
If not found, try these commands: