Monorepo for the TAAnalytics React Native SDK with pluggable adaptors.
@techartists/react-native-ta-analytics(packages/core): core event buffer, predefined events/user properties, adaptor interface, and helpers.@techartists/react-native-ta-analytics-adaptor-firebase(packages/analytics-firebase): Firebase Analytics adaptor (trims names/params, guards reserved names, exposes userID/appInstanceID) plus an optional Crashlytics logging adaptor.@techartists/react-native-ta-analytics-adaptor-mixpanel(packages/analytics-mixpanel): sends events/user properties to Mixpanel and forwardsuserIDtoidentify/reset.
Core (required):
npm install @techartists/react-native-ta-analytics @react-native-async-storage/async-storageAsyncStorage must be in your app's
package.jsonfor React Native autolinking. Without it, the SDK falls back to in-memory storage and counters reset every cold start.
Firebase Analytics adaptor (optional):
npm install @techartists/react-native-ta-analytics-adaptor-firebase @react-native-firebase/app @react-native-firebase/analytics
# If you also want Crashlytics logging support from the same package:
npm install @react-native-firebase/crashlyticsMixpanel adaptor (optional):
npm install @techartists/react-native-ta-analytics-adaptor-mixpanel mixpanel-react-native- Install packages you need (core required, adaptors optional) using the commands above. Make sure
@react-native-async-storage/async-storageis in your apppackage.jsonso autolinking picks it up. - iOS: run
cd ios && pod installafter adding deps. Firebase users must addGoogleService-Info.plist; Mixpanel has no extra native setup. - Android: ensure Firebase
google-services.jsonis configured if you use Firebase; otherwise no extra steps for core or Mixpanel. - Initialize analytics early (e.g., app bootstrap):
import {
ConsoleAnalyticsAdaptor,
TAAnalytics,
TAAnalyticsConfig,
Events,
ViewAnalyticsModel,
} from '@techartists/react-native-ta-analytics';
import { FirebaseAnalyticsAdaptor } from '@techartists/react-native-ta-analytics-adaptor-firebase';
import { MixpanelAnalyticsAdaptor } from '@techartists/react-native-ta-analytics-adaptor-mixpanel';
const analytics = new TAAnalytics(
new TAAnalyticsConfig({
analyticsVersion: '1.0.0',
adaptors: [
new ConsoleAnalyticsAdaptor(),
new FirebaseAnalyticsAdaptor(), // optional
new MixpanelAnalyticsAdaptor('YOUR_TOKEN'), // optional
],
appVersion: '1.0.0',
buildNumber: '1',
enableAppLifecycleEvents: true,
})
);
await analytics.start();
await analytics.track(Events.ENGAGEMENT, { name: 'demo' });
await analytics.trackViewShow(new ViewAnalyticsModel('home'));
analytics.userID = 'user-123';- Crashlytics logging (optional): add
new FirebaseCrashlyticsAdaptor()from the Firebase adaptor package to theadaptorsarray once Crashlytics is configured.
import {
ConsoleAnalyticsAdaptor,
Events,
TAAnalytics,
TAAnalyticsConfig,
ViewAnalyticsModel,
} from '@techartists/react-native-ta-analytics';
import { FirebaseAnalyticsAdaptor } from '@techartists/react-native-ta-analytics-adaptor-firebase';
import { MixpanelAnalyticsAdaptor } from '@techartists/react-native-ta-analytics-adaptor-mixpanel';
const analytics = new TAAnalytics(
new TAAnalyticsConfig({
analyticsVersion: '1.0.0',
adaptors: [
new ConsoleAnalyticsAdaptor(),
// Optional: log to Firebase Analytics.
new FirebaseAnalyticsAdaptor(),
// Optional: send to Mixpanel.
new MixpanelAnalyticsAdaptor('YOUR_TOKEN'),
],
appVersion: '2.3.1',
buildNumber: '100',
enableAppLifecycleEvents: true,
})
);
await analytics.start({
firstOpenParameterCallback: () => ({ source: 'app' }),
});
await analytics.track(Events.ENGAGEMENT, { name: 'demo' });
await analytics.trackViewShow(new ViewAnalyticsModel('home'));
await analytics.trackButtonTap('subscribe', new ViewAnalyticsModel('paywall'));- Trims event names and user properties to Crashlytics limits and logs events as
ta_event:<name>. - Writes user properties as Crashlytics attributes and forwards
analytics.userID = 'abc'tocrashlytics().setUserId. - Constructor options let you override trim lengths, prefix, and whether params are logged.
- Trims event names/user properties and forwards
analytics.userID = 'abc'tomixpanel.identify(orresetwhen cleared). - Uses
people.set/unsetfor user properties and supports optionalflushInterval/loggingEnabled.
analyticsVersion: required, stored asanalytics_versionuser property.adaptors: array of analytics adaptors to forward events to.appVersion/buildNumber: enables automaticapp_version_updateevents.automaticallyTrackedEventsPrefixConfig/manuallyTrackedEventsPrefixConfig: set prefixes for internal vs app-sent events/properties.enableAppLifecycleEvents: true to auto track APP_OPEN/APP_CLOSE viaAppState.storage: plug your ownStorageAdapter(AsyncStorage/MMKV/etc.) to persist counters/properties across launches.
trackViewShow,trackSecondaryViewShow,trackButtonTaptrackPaywallEnter/Exit/PurchaseTaptrackSubscriptionStartIntro/PaidRegular/New/RestoretrackEngagement/trackEngagementPrimarytrackOnboardingEnter/Exit,trackOnboardingQuestionnaireEnter/Exit,trackAccountSignupEnter/ExittrackErrorEvent,trackErrorCorrectedEvent,trackDebugEvent
onboarding_enter(start of onboarding;onboarding_exitwhen the user reaches the home screen)onboarding_questionnaire_enter/onboarding_questionnaire_exitaround the question stackpaywall_enter/paywall_exitaccount_signup_enter/account_signup_exit
A simple in-memory store ships by default, but if @react-native-async-storage/async-storage is available it will be used automatically. Add it directly to your app (RN autolinking only scans your app's package.json) or inject your own StorageAdapter (wrapping AsyncStorage, MMKV, etc.) to persist lifetime counters and user properties across launches.
yarn— install all workspace deps.yarn test/yarn lint/yarn typescript— run per-package scripts.yarn example(frompackages/core) — install example app deps.
MIT