Getting started

Quickstart

Install the SDK and see your first events in five minutes.

5 min readSDK 0.5.0

By the end of this page your app will send screens, taps and crashes to Riveora, and you’ll see them arrive live in the dashboard.

Create a project

In the dashboard, click Create app (later apps: Add another app in the app switcher) and give it a name. You’ll get a public project key that starts with pk_. It’s safe to ship inside your app: it can only send events, never read data.

Install the packages

shell
npx expo install @riveora/react-native @react-native-async-storage/async-storage react-native-view-shot expo-constants

AsyncStorage and react-native-view-shot have native code, so rebuild your app once after installing them. Reloading in Metro isn’t enough:

shell
npx expo run:ios      # or: npx expo run:android

Then close the app completely and open the new build. Expo Go already includes both, so skip this there. If view-shot is missing from a build, everything else still works; only screen pictures are off.

Wrap your app with the provider

Add the provider at the root of your app, together with the screen tracker for your navigation library.

Your app’s Install SDK page in the dashboard shows this for Expo Router, React Navigation or React Native without Expo, with your project key already filled in. If it also shows an endpoint line, keep it: that’s the address your events go to.

app/_layout.tsxtsx
import { Stack } from 'expo-router';
import Constants from 'expo-constants';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { RiveoraProvider, AsyncStorageAdapter } from '@riveora/react-native';
import { ExpoRouterTracker } from '@riveora/react-native/expo-router';

const storage = new AsyncStorageAdapter(AsyncStorage);

export default function RootLayout() {
  return (
    <RiveoraProvider
      projectKey="pk_your_project_key"
      storage={storage}
      appVersion={Constants.expoConfig?.version}
      consent="granted"
    >
      <ExpoRouterTracker />
      <Stack />
    </RiveoraProvider>
  );
}
Don’t skip storage, consent and appVersion

Without storage, the SDK keeps its data in memory only, so every app launch looks like a brand-new user. Without consent="granted", nothing is sent at all. If you ask users for permission first, see Privacy & consent.

Without appVersion, Riveora can’t tell which release an event came from, so “Did my fix work?” can’t compare versions. It isn’t detected automatically. In Expo, pass Constants.expoConfig?.version as above; in bare React Native, use DeviceInfo.getVersion() from react-native-device-info. See App version.

Run your app and check Live events

Start your app and move between a couple of screens. Open Live events in the dashboard: events arrive within about ten seconds, because the SDK sends them in batches every 10 seconds or every 20 events.

In a development build, the Screens page also lists every screen in your app within a few seconds, with a checklist of screens that still need a picture. Open those screens and they tick off.

Not seeing anything? Look for Riveora warnings in your console first: the SDK tells you when consent or storage is missing, or when the project key isn’t recognised. For more detail, pass logLevel="debug" to the provider and check Troubleshooting.

What’s next

Something unclear or missing? Email us and we’ll improve this page.
Quickstart · Riveora Docs