One awaited call
Purchases.setProxyURL is the whole change. Verification is already DISABLED in React Native.
SDK
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.
Purchases.setProxyURL is the whole change. Verification is already DISABLED in React Native.
A test_ key buys in Expo Go and on the web, with no store account.
The planned fork installs through an npm alias, so no import changes.
An Expo example loads offerings, buys through the Test Store and shows the entitlement.
Steps
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.
Add the App Store In-App Purchase key and the Google Play service account. See App Store and Google Play.
Add products, an entitlement such as pro and a current offering.
Call await Purchases.setProxyURL(...), then Purchases.configure with the appl_ or goog_ key for the platform.
Call Purchases.purchasePackage(pkg) and read customerInfo.entitlements.active["pro"].
Use the test_ key and tap Test valid purchase in the dialog.
TypeScript
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.
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
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 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:
// package.json: an npm alias keeps every import
"react-native-purchases": "npm:@revenuedot/react-native-purchases@<version>" Notes
test_ and rcb_ keys. RevenueDot accepts test_ only today.test_ keys in debug builds only. Ship with appl_ and goog_ keys.await Purchases.syncPurchasesForResult() once on the first launch of the update.FAQ
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.
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.
No. The React Native SDK already defaults to DISABLED, which is what RevenueDot needs. Remove any INFORMATIONAL or ENFORCED setting you added.
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.
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
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