Respectlytics Respect lytics
Menu
React Native Sign-up Privacy-first

How to track sign-up events in React Native without personal data

Sign-up is historically the noisiest event in mobile analytics — most SDKs default to tagging it with the brand-new user_id, email, signup method, and acquisition channel. Respectlytics helps developers avoid collecting personal data in the first place: in React Native, sign-up is one named event with no payload. If you need to break down by signup method, you use distinct event names — never custom parameters. Below: the React Native integration, why distinct event names are the right pattern, and how to compute activation rate without ever joining to your user table.

Place the call in the same code path that creates the account on your backend — after success, not before. Avoid passing the new user's email, ID, or signup channel as metadata; if you need a channel breakdown, emit a distinct event name instead.

Install the React Native SDK

bash Respectlytics
npm install @respectlytics/react-native
# or
yarn add @respectlytics/react-native

JavaScript-only — no native modules, no auto-linking, no New Architecture migration concerns. Bundle size: ~14KB minified+gzipped. Works in any Expo project (managed or bare) without `expo prebuild`.

Initialize Respectlytics in React Native

js Respectlytics
// App.tsx (or App.js)
import { useEffect } from 'react';
import Respectlytics from '@respectlytics/react-native';

export default function App() {
  useEffect(() => {
    Respectlytics.configure({ appKey: '<YOUR_APP_KEY>' });
  }, []);
  return <YourApp />;
}

Initialize once in your top-level component. No native config; no Info.plist or AndroidManifest changes. The SDK is Hermes- and JSC-compatible.

Track the event in React Native

js Respectlytics
import Respectlytics from '@respectlytics/react-native';

async function handleSignUp(method, credentials) {
  const response = await api.signUp(credentials);
  if (response.ok) {
    if (method === 'email')        Respectlytics.track('account_created_email');
    else if (method === 'apple')   Respectlytics.track('account_created_apple');
    else if (method === 'google')  Respectlytics.track('account_created_google');
    navigateToOnboarding();
  }
}

`response.ok` is your boundary — call `track` only when the backend confirms creation. Calling it on form submit produces inflated, noisy sign-up rates.

Privacy & implementation notes

Resist the urge to send `user_id` even "just in case". Once a user_id is in your analytics pipeline, every analyst will eventually use it for something — and you'll have built a per-user dataset by accident. Respectlytics's API rejects user IDs at the boundary: there's no path to accidentally re-introduce them later.

Distinct event names per signup method scale up to roughly 8–12 categories before they become unwieldy. Past that, bucket the long tail as `account_created_other`. Most apps have 3 (email + Google + Apple) — well below the threshold.

The React Native SDK is JavaScript-only — no Objective-C/Swift bridging on iOS, no Java/Kotlin bridging on Android. Side effects: no `react-native link`, no auto-linking, no New Architecture migration concerns, no platform-channel exception surfaces. Trade-off: no access to platform-only metadata (which we don't want to collect anyway).

Works in Expo managed workflow without `expo prebuild`. No config plugin is required. EAS Build users: nothing to configure. This is the smoothest integration path on RN — most analytics SDKs require ejecting from managed.

How this compares to other analytics SDKs

Sign-up event Firebase Analytics Mixpanel Respectlytics
New user_id stored Yes (mandatory) Yes (default) Never
Email / phone as event property Recommended Common Rejected by API
Signup method as event property Recommended (login_method) Common Use distinct event_name
Acquisition source attribution utm_* parameters UTM tracking Distinct event_name per source
Cross-device user identification Yes (App Instance ID) Yes (Identity Merging) Out of scope (sessions, not users)
Resulting privacy posture Per-user, identifiable Per-user, identifiable Session-scoped, no PII

Frequently asked questions

How do we measure activation without joining sign-up to first action?

By session. A session that emits both `account_created` and at least one of your "meaningful action" event names is an activated session. Compute the ratio across your session set — that's activation rate. You never need to join to a user table to get this number.

What about email vs Apple vs Google sign-up channels?

Use distinct event names: `account_created_email`, `account_created_apple`, `account_created_google`. The aggregation buckets them automatically. Embedding the method as a custom parameter is rejected by the API.

Can we still compute conversion from a marketing campaign?

Yes — use distinct event names per campaign source. If you have many campaigns, that taxonomy can balloon — keep it to your top 5–10 sources and bucket the rest as `account_created_other`. The trade-off: you give up long-tail per-campaign granularity in exchange for never storing UTM parameters or referrers.

What if our backend creates the account but the user abandons before the next screen — does the sign-up still get tracked?

Only if your call to `track` runs before the abandonment. Respectlytics's event queue is RAM-only — events not flushed before app force-quit are lost by design. For a signal as critical as sign-up, instrument the event right after the API call returns, not on the next screen.

Related guides

Track what matters. Collect nothing you don't.

Five-field event schema, RAM-only event queue, no IDFA, no AAID, no persistent user IDs. Helps developers avoid collecting personal data in the first place.