Skip to main content
Version: v2

RapidoReach React Native SDK

The RapidoReach React Native SDK lets you show rewarded survey content in your React Native app (offerwall / placements / quick questions) and receive reward events.

Latest release: 1.0.8 — brings safer init guards, error events, and a bundled Android AAR.

Before you start

Get an API key

Create an app in the RapidoReach dashboard and copy your API key.

Requirements

  • React Native: tested with React 19 / React Native 0.83.x
  • Android: minSdk 23 (native SDK requirement; new RN templates often use minSdk 24)
  • iOS: minimum iOS 15.1 (React Native 0.83 requirement)

Install

Install the package:

npm install @rapidoreachsdk/react-native-rapidoreach

Then install iOS pods:

cd ios && pod install && cd ..

Note: the Android SDK (RapidoReach-1.0.2.aar) is already packaged under android/libs, so you can publish your app without any Maven credentials.

Usage

Import

import RapidoReach, { RapidoReachEventEmitter } from '@rapidoreachsdk/react-native-rapidoreach';

Initialize (required)

Initialize once (app start or after login) and always await it:

await RapidoReach.initWithApiKeyAndUserId('YOUR_API_TOKEN', 'YOUR_USER_ID');

Most APIs return Promises and will reject with an error containing a code + message. Wrap calls in try/catch, especially during integration.

Common error codes:

  • not_initialized: call and await initWithApiKeyAndUserId first
  • no_activity (Android): call from a foreground screen (Activity available)
  • no_presenter (iOS): no active view controller available to present UI
  • not_linked: native module not installed/linked (run pods/gradle rebuild)

Example:

try {
await RapidoReach.sendUserAttributes({ country: 'US' });
} catch (e) {
console.warn('RapidoReach error:', e);
}

For non-Promise APIs (like showRewardCenter()), the native layer emits an onError event with { code, message } (see below).

Show the offerwall (reward center)

RapidoReach.isSurveyAvailable((isAvailable) => {
if (isAvailable) {
RapidoReach.showRewardCenter();
}
});

Tip: for more control and better UX, prefer placement-based checks using await RapidoReach.canShowContent(tag) and await RapidoReach.listSurveys(tag).

Rewards and callbacks

For production reward attribution, use server-side callbacks whenever possible. See: ../api/callbacks

Client-side reward events

const sub = RapidoReachEventEmitter.addListener('onReward', (quantity) => {
// quantity: converted virtual currency amount
});

Events (survey availability, UI open/close, errors)

Reward center opened/closed

const opened = RapidoReachEventEmitter.addListener('onRewardCenterOpened', () => {});
const closed = RapidoReachEventEmitter.addListener('onRewardCenterClosed', () => {});

Survey availability

const availability = RapidoReachEventEmitter.addListener(
'rapidoreachSurveyAvailable',
(surveyAvailable) => {
// boolean
}
);
const errSub = RapidoReachEventEmitter.addListener('onError', (payload) => {
// payload: { code: string, message: string }
console.warn('RapidoReach onError:', payload);
});

Remember to remove subscriptions on unmount:

sub.remove();
opened.remove();
closed.remove();
availability.remove();
errSub.remove();

Customization (navigation bar)

RapidoReach.setNavBarColor('#211056');
RapidoReach.setNavBarText('Rewards');
RapidoReach.setNavBarTextColor('#FFFFFF');

Additional APIs

  • updateBackend(baseURL, rewardHashSalt?) (staging/regional backends)
  • sendUserAttributes(attributes, clearPrevious?)
  • setUserIdentifier(userId)
  • Placement helpers: getPlacementDetails(tag), listSurveys(tag), hasSurveys(tag), canShowSurvey(tag, surveyId), canShowContent(tag), showSurvey(tag, surveyId, customParams?)
  • Quick Questions: fetchQuickQuestions(tag), hasQuickQuestions(tag), answerQuickQuestion(tag, questionId, answer)
  • Debug helpers: getBaseUrl(), enableNetworkLogging(enabled)
const tag = 'default';

const canShow = await RapidoReach.canShowContent(tag);
if (!canShow) return;

const surveys = await RapidoReach.listSurveys(tag);
const firstSurveyId = surveys?.[0]?.surveyIdentifier;
if (!firstSurveyId) return;

await RapidoReach.showSurvey(tag, firstSurveyId, { source: 'home_screen' });

User attributes

Send attributes to improve targeting and eligibility (only send values you have consent for):

await RapidoReach.sendUserAttributes(
{ country: 'US', age: 25, premium: true },
false // clearPrevious
);

Network logging (debug)

RapidoReach.enableNetworkLogging(true);

const netSub = RapidoReachEventEmitter.addListener('rapidoreachNetworkLog', (entry) => {
// { name, method, url, requestBody?, responseBody?, error?, timestampMs }
console.log(entry);
});

Example app

The repo includes a full example app:

cd example && npm install && cd ios && pod install && cd .. && npm run ios

Contact

Please send questions or bug reports to admin@rapidoreach.com.