Firebase Analytics service for React Native apps - Platform-agnostic analytics tracking with decorators.
Built with Domain-Driven Design (DDD) principles.
npm install @umituz/react-native-firebase-analytics@umituz/react-native-firebase>= 1.0.0 (for Firebase App initialization)firebase>= 11.0.0react>= 18.2.0react-native>= 0.74.0
- ✅ Platform-agnostic (Web, iOS, Android)
- ✅ Automatic event tracking with decorators
- ✅ Performance tracking
- ✅ Screen view tracking
- ✅ Screen time tracking (how long users stay on screens)
- ✅ Navigation tracking (user journey analysis)
- ✅ Button click tracking
- ✅ CRUD operation tracking
- ✅ User property management
- ✅ Domain-Driven Design architecture
import { initializeFirebase } from '@umituz/react-native-firebase';
import { firebaseAnalyticsService } from '@umituz/react-native-firebase-analytics';
// Initialize Firebase App
const config = {
apiKey: 'your-api-key',
authDomain: 'your-project.firebaseapp.com',
projectId: 'your-project-id',
};
initializeFirebase(config);
// Initialize Analytics
await firebaseAnalyticsService.init();import { firebaseAnalyticsService } from '@umituz/react-native-firebase-analytics';
// Log custom event
await firebaseAnalyticsService.logEvent('button_clicked', {
button_name: 'sign_up',
screen: 'login',
});
// Log screen view
await firebaseAnalyticsService.logScreenView({
screen_name: 'HomeScreen',
screen_class: 'HomeScreen',
});
// Log screen time
await firebaseAnalyticsService.logScreenTime({
screen_name: 'HomeScreen',
screen_class: 'HomeScreen',
time_spent_seconds: 45,
});
// Log navigation
await firebaseAnalyticsService.logNavigation({
from_screen: 'HomeScreen',
to_screen: 'SettingsScreen',
screen_class: 'SettingsScreen',
});
// Log button click
await firebaseAnalyticsService.logButtonClick({
button_id: 'create_deck',
button_name: 'Create Deck',
screen_name: 'HomeScreen',
screen_class: 'HomeScreen',
});import { TrackEvent } from '@umituz/react-native-firebase-analytics';
class UserService {
@TrackEvent('user_created', { source: 'signup' })
async createUser(data: UserData) {
// Your logic here
return user;
}
}import { useScreenView, useScreenTime, useNavigationTracking } from '@umituz/react-native-firebase-analytics';
function HomeScreen() {
// Comprehensive tracking (screen view + time + navigation)
useScreenView('home', 'HomeScreen');
// OR use individual hooks
useScreenTime('home', 'HomeScreen'); // Track time spent
useNavigationTracking('home', 'HomeScreen'); // Track navigation
return <View>...</View>;
}import { trackButtonClick, trackCRUDOperation } from '@umituz/react-native-firebase-analytics';
// Track button clicks
trackButtonClick('create_deck', {
buttonName: 'Create Deck',
screenName: 'HomeScreen',
screenClass: 'HomeScreen',
});
// Track CRUD operations
trackCRUDOperation('create', 'deck', 'deck_123', {
deck_title: 'Spanish Vocabulary',
card_count: 10,
});import { TrackPerformance, TrackOperation } from '@umituz/react-native-firebase-analytics';
class DataService {
@TrackPerformance('data_fetch')
async fetchData() {
// Automatically tracks execution time
return data;
}
@TrackOperation('database_query', 'database')
async queryDatabase() {
// Tracks performance and errors
return results;
}
}firebaseAnalyticsService.init(userId?)- Initialize analyticsfirebaseAnalyticsService.logEvent(eventName, params?)- Log custom eventfirebaseAnalyticsService.logScreenView(params)- Log screen viewfirebaseAnalyticsService.logScreenTime(params)- Log screen time (seconds)firebaseAnalyticsService.logNavigation(params)- Log navigation between screensfirebaseAnalyticsService.logButtonClick(params)- Log button clickfirebaseAnalyticsService.setUserProperty(key, value)- Set user propertyfirebaseAnalyticsService.setUserProperties(properties)- Set multiple user propertiesfirebaseAnalyticsService.clearUserData()- Clear user datafirebaseAnalyticsService.getCurrentUserId()- Get current user ID
useScreenView(screenName, screenClass?)- Comprehensive screen tracking (view + time + navigation)useScreenTime(screenName, screenClass?)- Track time spent on screenuseNavigationTracking(screenName, screenClass?)- Track navigation between screens
trackButtonClick(buttonId, options?)- Track button clickstrackCRUDOperation(operation, entityType, entityId, params?)- Track CRUD operations
@TrackEvent(eventName, staticParams?)- Automatic event tracking@TrackPerformance(operationName?)- Performance tracking@TrackOperation(operationName, errorType?)- Performance + error tracking
performanceTracker.start(operationId)- Start trackingperformanceTracker.end(operationId, metadata?)- End trackingperformanceTracker.track(operationId, operation)- Track async operation
This package follows Domain-Driven Design principles:
- Infrastructure Layer: Firebase Analytics implementation
- Presentation Layer: Decorators for automatic tracking
- Platform-agnostic: Works on Web, iOS, and Android
MIT