Primary package (current docs):
npm install @qonversion/react-native-sdkInitialize once at app startup:
import Qonversion, { QonversionConfigBuilder, LaunchMode } from '@qonversion/react-native-sdk';
const config = new QonversionConfigBuilder(
process.env.EXPO_PUBLIC_QONVERSION_PROJECT_KEY ?? '',
LaunchMode.SUBSCRIPTION_MANAGEMENT
).build();
Qonversion.initialize(config);If using custom networking route:
const config = new QonversionConfigBuilder(
process.env.EXPO_PUBLIC_QONVERSION_PROJECT_KEY ?? '',
LaunchMode.SUBSCRIPTION_MANAGEMENT
)
.setProxyURL('https://your-proxy.example.com')
.build();- Qonversion React Native SDK is a native module; do not rely on Expo Go for full purchase testing.
- Use Expo prebuild + dev client or EAS builds for iOS/Android purchase validation.
- Re-run native build after dependency or native config changes.
Practical commands:
npx expo prebuild
npx expo run:ios
npx expo run:androidor EAS:
eas build --platform ios --profile development
eas build --platform android --profile developmentCall after login:
await Qonversion.getSharedInstance().identify(userSub);Call at logout/account switch:
await Qonversion.getSharedInstance().logout();Optionally map Qonversion id for backend correlation:
const userInfo = await Qonversion.getSharedInstance().userInfo();
const qonversionId = userInfo.qonversionId;Load offerings/products:
const offerings = await Qonversion.getSharedInstance().offerings();
const products = await Qonversion.getSharedInstance().products();Purchase:
try {
const entitlements = await Qonversion.getSharedInstance().purchaseProduct(product);
} catch (e: any) {
if (e?.userCanceled) {
// user canceled
} else {
// real error
}
}Restore:
const entitlements = await Qonversion.getSharedInstance().restore();Client-side gate:
const entitlements = await Qonversion.getSharedInstance().checkEntitlements();Use entitlement renew-state data when available to branch UX for:
- will renew
- canceled but still active
- billing issue / grace period
Qonversion docs include multiple React Native migration guides (4+, 6+, 6->7, 7->8 and later). Validate API names against installed major version before editing code.
Examples of migration-sensitive areas:
purchaseProduct(...)vs newerpurchase(purchaseModel)patternsupdatePurchase(...)signatures- permission naming transitions to entitlement naming
- user property API renames
When code and package major are mismatched:
- Pin target major version.
- Refactor to that API shape.
- Smoke-test purchase, restore, and entitlement-check flows.
- iOS and Android sandbox tester flows pass.
- Cancel path does not show fatal error UX.
- Restore path reactivates access.
- Entitlement-based UI unlocks immediately after purchase.
- Backend protected routes still enforce server truth.
- Logs include purchase lifecycle events.
- Qonversion React Native SDK docs: https://documentation.qonversion.io/docs/docs/react-native-sdk
- Purchase and restore patterns: https://documentation.qonversion.io/docs/docs/making-purchases
- React Native migration guides: https://documentation.qonversion.io/docs/docs/react-native-8-migration-guide
- Entitlement checks: https://documentation.qonversion.io/docs/docs/check-permissions
- User identifiers: https://documentation.qonversion.io/docs/user-identifiers
- Offline mode: https://documentation.qonversion.io/docs/offline-sdk-mode