@gurulu/react-native
v0.1.0
Published
Gurulu Analytics React Native bridge — wraps @gurulu/ios-sdk and @gurulu/android-sdk
Maintainers
Readme
@gurulu/react-native-sdk
React Native bridge for the Gurulu Analytics mobile SDKs. This package is a thin wrapper — all analytics logic (network ingest, offline queue, identity, consent) lives in the native SDKs:
- iOS:
@gurulu/ios-sdk(Phase 14 B1, Swift) - Android:
@gurulu/android-sdk(Phase 14 B2, Kotlin)
Phase 15 B1 introduces this bridge. Real on-device testing is deferred to a
machine with the full iOS + Android toolchain (Xcode / xcodebuild /
pod install / Android SDK / Gradle / react-native init).
Installation
npm install @gurulu/react-native-sdk
# or
yarn add @gurulu/react-native-sdkiOS
cd ios && pod installThe bundled GuruluReactNative.podspec depends on React-Core. You must also
ensure the host app's Podfile can resolve GuruluSDK (the Phase 14 Swift
Package) — either via pod 'GuruluSDK', :path => '../../ios-sdk' or by
distributing the ios-sdk as a regular CocoaPod / SPM dependency.
Android
Autolinking picks up GuruluRNPackage. The module depends on the Phase 14 B2
:android-sdk Gradle module; make sure your root settings.gradle includes
that project:
include ':android-sdk'
project(':android-sdk').projectDir = file('../../android-sdk')Expo
This package ships native modules, so it cannot run inside Expo Go. Use an EAS development build:
eas build --profile development --platform iosUsage
import GuruluRN from '@gurulu/react-native-sdk';
await GuruluRN.initialize({
siteId: 'abc123',
token: 'sdk-token',
endpoint: 'https://ingest.gurulu.io/v1/ingest',
flushIntervalSec: 30,
batchSize: 50,
debug: __DEV__,
});
GuruluRN.setConsent('accepted');
GuruluRN.identify('user-42', { plan: 'pro' });
GuruluRN.track('button_click', { cta: 'subscribe' });
GuruluRN.trackScreen('Home');
await GuruluRN.flush();Screen tracking
The bridge exposes a convenience helper GuruluRN.trackScreen(name) which
emits a $screen event. Wire it up to React Navigation via useFocusEffect:
import { useFocusEffect } from '@react-navigation/native';
import GuruluRN from '@gurulu/react-native-sdk';
export function HomeScreen() {
useFocusEffect(
React.useCallback(() => {
GuruluRN.trackScreen('Home');
}, []),
);
return <View />;
}API
| Method | Description |
| --- | --- |
| initialize(config) | Configures the underlying native SDK. Idempotent. |
| track(name, props?) | Enqueue a custom event. |
| identify(userId, traits?) | Bind a user identity. |
| setConsent('pending' \| 'accepted' \| 'rejected') | Update consent level. |
| reset() | Clear identity + queued events (logout). |
| flush() | Force immediate flush of queued events. |
| trackScreen(name, props?) | Emit a $screen event. |
Status
| Layer | Status | | --- | --- | | TypeScript API surface | Shipped (Phase 15 B1) | | iOS Swift bridge | Shipped (not yet verified on a real device) | | Android Kotlin bridge | Shipped (not yet verified on a real device) | | Network ingest end-to-end | Pending Phase 14 on-device validation |
Phase 15 B3 will add mobile disk persistence and Phase 15 B4 adds a context-aware bootstrap.
