SDK

In-app purchases and subscriptions for React Native and Expo apps

To add subscriptions to a React Native or Expo app on RevenueDot, keep react-native-purchases and await Purchases.setProxyURL("https://api.revenuedot.app") before Purchases.configure. Entitlement verification is already off by default in this SDK. It works on iOS and Android builds, and in Expo Go and on the web with a Test Store key.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

One awaited call

Purchases.setProxyURL is the whole change. Verification is already DISABLED in React Native.

Expo Go and web

A test_ key buys in Expo Go and on the web, with no store account.

Imports stay

The planned fork installs through an npm alias, so no import changes.

Example app

An Expo example loads offerings, buys through the Test Store and shows the entitlement.

Steps

How to add subscriptions to a React Native app with RevenueDot

  1. 01

    Create a free Cloud project

    Start free on Cloud. Add an App Store app and a Google Play app, or start with a Test Store app and its test_ key.

  2. 02

    Connect the stores

    Add the App Store In-App Purchase key and the Google Play service account. See App Store and Google Play.

  3. 03

    Create your catalog

    Add products, an entitlement such as pro and a current offering.

  4. 04

    Await the proxy URL before configure

    Call await Purchases.setProxyURL(...), then Purchases.configure with the appl_ or goog_ key for the platform.

  5. 05

    Buy and check the entitlement

    Call Purchases.purchasePackage(pkg) and read customerInfo.entitlements.active["pro"].

  6. 06

    Test in Expo Go or on the web

    Use the test_ key and tap Test valid purchase in the dialog.

TypeScript

The React Native proxy URL change

setProxyURL returns a promise, so await it before configure. If your code sets ENTITLEMENT_VERIFICATION_MODE.INFORMATIONAL or ENFORCED, remove it. ENFORCED would fail every request.

Point the SDK at RevenueDotTypeScript
import { Platform } from "react-native";
import Purchases from "react-native-purchases";

await Purchases.setProxyURL("https://api.revenuedot.app");
Purchases.configure({
  apiKey: Platform.OS === "ios" ? "appl_..." : "goog_...",
  // Leave entitlementVerificationMode unset: DISABLED is the React Native default.
});

TypeScript

Check an entitlement and make a purchase

RevenueCat's API, unchangedTypeScript
const customerInfo = await Purchases.getCustomerInfo();
const isPro = customerInfo.entitlements.active["pro"] !== undefined;

const offerings = await Purchases.getOfferings();
const pkg = offerings.current?.availablePackages[0];
if (pkg) {
  try {
    const { customerInfo: after } = await Purchases.purchasePackage(pkg);
    const nowPro = after.entitlements.active["pro"] !== undefined;
  } catch (e: any) {
    if (!e.userCancelled) throw e;
  }
}

Fork

The RevenueDot fork package for React Native

The fork lives at github.com/revenuedot/react-native-purchases. It depends on RevenueDot's hybrid-common native builds, which trust RevenueDot's signing key. None of its packages is published yet (checked October 2026), so use proxy mode today. The planned install is an npm alias:

Planned fork installpackage.json
// package.json: an npm alias keeps every import
"react-native-purchases": "npm:@revenuedot/react-native-purchases@<version>"

Notes

React Native and Expo details worth knowing

  • Expo Go and web: the SDK runs in browser mode and accepts test_ and rcb_ keys. RevenueDot accepts test_ only today.
  • Native builds accept test_ keys in debug builds only. Ship with appl_ and goog_ keys.
  • Migrating from RevenueCat? Call await Purchases.syncPurchasesForResult() once on the first launch of the update.
  • Status: the Expo example ran on the web against RevenueDot. Native builds of it are not verified yet.

FAQ

React Native and Expo: questions people ask

How do I add in-app purchases to a React Native app?

Install react-native-purchases, point it at a backend that checks store receipts, then call getOfferings and purchasePackage. With RevenueDot you await Purchases.setProxyURL before configure, connect your App Store and Google Play apps, and check customerInfo.entitlements.

Does react-native-purchases work with Expo?

Yes. Expo Go and the web run the SDK in browser mode with a test_ key. For real store purchases you build a development or production app, as with any native purchase library, and use your appl_ and goog_ keys.

Do I need to turn off entitlement verification in React Native?

No. The React Native SDK already defaults to DISABLED, which is what RevenueDot needs. Remove any INFORMATIONAL or ENFORCED setting you added.

Can I test React Native purchases without Apple or Google accounts?

Yes. Create a Test Store app and use its test_ key. In Expo Go or on the web, tap a package and choose Test valid purchase.

Will my imports change when I switch to the RevenueDot fork?

No. The planned install is an npm alias, so import Purchases from react-native-purchases keeps working. The fork is not published yet.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free