This is the only Firebase Analytics package for React Native that has universal platform support (iOS, Android, Web, and Electron).
expo-firebase-analytics
enables the use of native Google Analytics for Firebase. Google Analytics for Firebase is a free app measurement solution that provides insight on app usage and user engagement.
Learn more in the official Firebase Docs.Android Device | Android Emulator | iOS Device | iOS Simulator | Web |
---|---|---|---|---|
→
expo install expo-firebase-analytics
If you're installing this in a bare React Native app, you should also follow these additional installation instructions.
expo install firebase
, which install the Firebase JS SDK.logEvent
to record events.measurementId
exists in your firebase config. If measurementId
doesn't exist, then you need to enable or update Google Analytics in your Firebase project.{ "expo": { "web": { "config": { "firebase": { "apiKey": "AIzaXXXXXXXX-xxxxxxxxxxxxxxxxxxx", ... "measurementId": "G-XXXXXXXXX" } } } } }
This limitation only applies to the Expo Go app in the App and Play stores; standalone builds, custom clients & bare apps support the full native Firebase Analytics experience.
audiences
, campaign attribution
, and some user properties
, such as Age
and Interests
, you will need to include AdSupport. This is currently only possible in the Bare Workflow and not enabled by default because Apple & Google are strict with allowing apps to use this library.+
to add a frameworkAdSupport.framework
logEvent
property. Also it's just a lot of fun to see that people actually use the features you work hard on! 😍/* * Say we are in a tinder clone, and a user presses the card to view more * information on a user. We should track this event so we can see if people * are even using it. * * If lots of users are opening the card then swiping through photos, just * to dismiss again, then we should consider making it possible to look * through photos without having to enter the profile. */ onPressProfileButton = uid => { Analytics.logEvent('ExpandProfile', { /* * We want to know if the user came from from the swipe card as * opposed to from chat or a deep link. */ sender: 'card', /* * This may be too specific and not very useful, but maybe down the line * we could investigate why a certain user is more popular than others. */ user: uid, /* * We can use this information later to compare against other events. */ screen: 'profile', purpose: 'Viewing more info on a user', }); };
react-navigation
import React from 'react'; // Import Navigation import { createBottomTabNavigator } from 'react-navigation'; // Import Firebase import * as Analytics from 'expo-firebase-analytics'; // Import some screens import HomeScreen from '../screens/HomeScreen'; import ProfileScreen from '../screens/ProfileScreen'; // Create a generic Navigator const AppNavigator = createBottomTabNavigator({ // The name `Profile` or `Home` are what will appear in Firebase Analytics. Profile: ProfileScreen, Home: HomeScreen, }); // Get the current screen from the navigation state function getActiveRouteName(navigationState) { if (!navigationState) return null; const route = navigationState.routes[navigationState.index]; // Parse the nested navigators if (route.routes) return getActiveRouteName(route); return route.routeName; } export default () => ( <AppNavigator onNavigationStateChange={(prevState, currentState) => { const currentScreen = getActiveRouteName(currentState); const prevScreen = getActiveRouteName(prevState); if (prevScreen !== currentScreen) { // Update Firebase with the name of your screen Analytics.setCurrentScreen(currentScreen); } }} /> );
import * as Analytics from 'expo-firebase-analytics';
expo install firebase
.string
) - The name of the event. Should contain 1 to 40 alphanumeric characters or underscores.
The name must start with an alphabetic character. Some event names are reserved. The firebase_
,
google_
, and ga_
prefixes are reserved and should not be used. Note that event names are
case-sensitive and that logging two events whose names differ only in case will result in two
distinct events. To manually log screen view events, use the screen_view
event name.Record<string, any>
) - The dictionary of event parameters. Passing undefined
indicates that the
event has no parameters. Parameter names can be up to 40 characters long and must start with an
alphabetic character and contain only alphanumeric characters and underscores. Only String
and
Number
parameter types are supported; and items
arrays containing dictionaries.
String
parameter values can be up to 100 characters long. The firebase_
, google_
, and
ga_
prefixes are reserved and should not be used for parameter names.Logs an app event. The event can have up to 25 parameters. Events with the same name must have the same parameters. Up to 500 event names are supported. Using predefined events and/or parameters is recommended for optimal reporting. See the Google Analytics event reference for a list of all predefined events.
The following event names are reserved for the native SDKs automatic collection and cannot be used:ad_activeview, ad_click, ad_exposure, ad_query, ad_reward, adunit_exposure, app_background, app_clear_data, app_exception, app_remove, app_store_refund, app_store_subscription_cancel, ad_activeview, ad_click, ad_exposure, ad_query, ad_reward, adunit_exposure, app_background, app_clear_data, app_exception, app_remove, app_store_refund, app_store_subscription_cancel, app_store_subscription_convert, app_store_subscription_renew, app_update, app_upgrade, dynamic_link_app_open, dynamic_link_app_update, dynamic_link_first_open, error, firebase_campaign, first_open, first_visit, in_app_purchase, notification_dismiss, notification_foreground, notification_open, notification_receive, os_update, session_start, session_start_with_rollout, user_engagement
await Analytics.logEvent('add_to_cart', { currency: 'USD', value: 29.98 items: [{ id: "P12345", name: "Expo Warhol T-Shirt", brand: "Expo", category: "Apparel/T-Shirts", coupon: "SUMMER_DISCOUNT", list_name: "Search Results", list_position: 1, price: 14.99, quantity: 2, variant: "Blue" }] });
Clears all analytics data for this instance from the device and resets the app instance ID.
boolean
) - A flag that enables or disables Analytics collection.Sets whether analytics collection is enabled for this app on this device. This setting is persisted across app sessions. By default it is enabled.
string
) - UUIDv4 string value to set for the current session in Expo Go.Expo Go Only. Sets the clientId to the given value. For best results, set this value before calling any other functions on this module.
By default, the clientId is set to Constants.installationId
in Expo Go, which is deprecated and
will be removed in SDK 44. At that time, this method will need to be used to set the clientId
when using Expo Go.
void
string
) - The name of the current screen. Should contain 1 to 100 characters. Set to
undefined
to clear the current screen name.string
) - The name of the screen class. Should contain 1 to 100 characters. By
default this is the class name of the current screen (UIViewController on iOS). Set to
undefined
to revert to the default class name.Sets the current screen name, which specifies the current visual context in your app. This helps identify the areas in your app where users spend their time and how they interact with your app.
boolean
) - A flag that enables or disables debug mode.Expo Go Only. Enables or disabled debug mode on the Expo client, so events can be tracked using the DebugView in the Analytics dashboard.
This option is only available in Expo Go. When using a custom development app, a standalone app, the bare workflow or web, use the natively available options.
number
) - The custom time of inactivity in milliseconds before the current
session terminates.Sets the interval of inactivity in seconds that terminates the current session. The default value is 1800000 milliseconds (30 minutes).
boolean
) - A flag that enables or disables unavailability logging.Enables or disables the warning and log messages when using Firebase Analytics on the Expo client.
Firebase Analytics is not available on the Expo client and therefore logs the requests to the console for development purposes. To test Firebase Analytics, create a standalone build or custom client. Use this function to suppress the warning and log messages.
void
null | string
) - The user ID to ascribe to the user of this app on this device, which must be
non-empty and no more than 256 characters long. Setting userID to null removes the user ID.Sets the user ID property. This feature must be used in accordance with Google's Privacy Policy
Record<string, null | string>
) - Key/value set of user properties. Values can be up to 36 characters long.
Setting the value to null removes the user property.Sets multiple user properties to the supplied values.
await Analytics.setUserProperties({ loves_expo: 'a lot', });
string
) - The name of the user property to set. Should contain 1 to 24 alphanumeric characters
or underscores and must start with an alphabetic character. The firebase_
, google_
, and
ga_
prefixes are reserved and should not be used for user property names.null | string
) - The value of the user property. Values can be up to 36 characters long. Setting the
value to null removes the user property.Sets a user property to a given value. Up to 25 user property names are supported. Once set, user property values persist throughout the app life-cycle and across sessions.
The following user property names are reserved and cannot be used:
first_open_time
last_deep_link_referrer
user_id
await Analytics.setUserProperty('favorite_batmobile', '1989 Burton-mobile');