React Native Crashlytics: Step-by-Step Setup Guide (2026)
React Native Crashlytics is Firebase Crashlytics added to a React Native app through the React Native Firebase module @react-native-firebase/crashlytics. It turns every crash into a report automatically and records handled JavaScript errors you pass to recordError(), with stack traces, device data and custom keys. Setup takes the app and crashlytics packages, your Firebase config files and a rebuild.
| Step | What to do | Detail |
|---|---|---|
| 1. Install | Add @react-native-firebase/app and @react-native-firebase/crashlytics | Run pod install for iOS |
| 2. Configure Firebase | Add google-services.json (Android) and GoogleService-Info.plist (iOS) | Download both from your Firebase project |
| 3. Rebuild | Rebuild the native apps | Expo needs the config plugin and a development build, not Expo Go |
| 4. Test | Trigger a test crash with crash() | Reopen the app and check the Firebase console |
| 5. Add context | Use setUserId(), setAttribute(), log() and recordError() | Recorded JavaScript errors keep their stack traces |
| 6. Link sessions (optional) | Attach UXCam's RNUxcam.urlForCurrentSession() as a custom key | Let one tool own crash handling: set UXCam's enableCrashHandling to false |
UXCam adds the other half of the picture. It records the session behind each crash, so you can watch what the user did right before it happened, next to the stack trace.
This guide shows how to add Firebase Crashlytics to your React Native app, which of its features matter most, and how to combine it with UXCam. By the end, you'll have a crash reporting setup that tells you both what failed and what the user was doing.
What is React Native Crashlytics?
It's the same Crashlytics that native iOS and Android apps use, so your React Native crash reports land in the Firebase console next to any native apps you run. It's a lightweight crash reporter that helps you track, prioritize and fix the stability issues that hurt app quality.
Key features of Crashlytics for React Native
Real-time crash reporting: Crashlytics reports crashes and non-fatal errors within minutes, with details for each one.
Issue prioritization: It groups similar crashes and ranks issues by how often they happen and how many users they affect.
Stack trace analysis: Stack traces point to the line of code where the crash happened.
Custom logging: You can add log messages and custom keys to give each crash more context.
Cross-platform support: One setup covers both iOS and Android.
Firebase integration: Crashlytics works alongside other Firebase products, such as Analytics and Performance Monitoring.
Benefits of Crashlytics for React Native apps
A more stable app: Finding and fixing crashes quickly makes the app more reliable for everyone.
Less time triaging: Automatic grouping and prioritization show you which crashes matter most.
Better retention: Fewer crashes mean fewer frustrated users, better ratings and more people who stay.
Insight across devices: Crash data shows how the app behaves on different devices and OS versions.
How to implement Firebase Crashlytics in a React Native app
Implementing Crashlytics in React Native comes down to installing two packages, adding your Firebase config files and rebuilding the app. The official React Native Firebase docs cover every step. This section highlights what matters most in a React Native project.
1. Setup and installation
Install @react-native-firebase/app and @react-native-firebase/crashlytics, then add your Firebase config files: google-services.json for Android and GoogleService-Info.plist for iOS. Each platform has a few native steps of its own, so follow the platform sections of the docs, run pod install and rebuild the app.
2. Automatic crash reporting
Once installed, Crashlytics captures crashes automatically. Each report includes the error details, the device type, the OS and the app version, which helps you understand what went wrong.
3. Manual error logging
Not every error crashes the app. When your code catches an error that still matters, call recordError() with the Error object. Crashlytics records it as a non-fatal issue, with its stack trace.
4. Custom keys and logs
Custom keys and log messages add context to each report. Use setAttribute() or setAttributes() for app state, such as the current screen or plan, and log() for the steps that led up to a crash.
5. User identification
Call setUserId() with an internal user ID to see whether specific users keep running into problems. That helps your support team, and it makes user-specific bugs easier to debug.
6. Opt-out mechanism
Give users a way to opt out of crash reporting. Calling setCrashlyticsCollectionEnabled(false) stops collection until they agree, which helps you comply with privacy regulations and respect their choice.
7. Testing crash reporting
Force a test crash with crash() to check that everything works. Reopen the app so the report uploads, then confirm it appears in the Firebase console.
8. Performance considerations
Crashlytics is designed to have minimal impact on performance. It does its work in the background, so it doesn't slow down your app.
9. Versioning
Keep the React Native Firebase packages up to date for new features and fixes. Check that the version you install supports your React Native version.
10. Dashboard usage
The Firebase console is where you analyze crash reports. Sort issues by how many users they affect, so you fix the biggest problems first.
11. Symbolication
Crash reports are only useful if you can read them. Upload dSYM files for iOS and ProGuard or R8 mapping files for Android, and set up automatic uploads so you don't have to remember.
12. Integration with other Firebase services
Crashlytics gets more useful next to other Firebase products. Google Analytics adds the events that led up to a crash, and Performance Monitoring shows app performance alongside crash data.
13. Handling JavaScript errors
React Native Firebase installs its own JavaScript exception handler, so unhandled JavaScript errors also become Crashlytics reports. For errors your code catches, call recordError() so they keep their stack traces. Between the two, both native and JavaScript errors are covered.
How UXCam adds context to Crashlytics reports
UXCam adds the part a crash report can't show: what the user did before the crash. Combining the two gives you the stack trace and the session replay for the same problem.
Integrate UXCam into your mobile app
To get started with UXCam, follow these steps:
Install the react-native-ux-cam package with npm or yarn, then run pod install in your ios folder. Expo apps need a development build or EAS Build, because Expo Go can't load native modules.
In your root component, call RNUxcam.optIntoVideoRecording() and then RNUxcam.startWithConfiguration() with your app key. Turn off automatic screen tagging and tag screens yourself with RNUxcam.tagScreenName(), as UXCam recommends for React Native.
Decide which tool owns native crashes. The UXCam crash docs warn that two crash handlers can conflict, so turn one off at app start. If Crashlytics stays your crash reporter, set enableCrashHandling to false in UXCam. On iOS, that also turns off UXCam's ANR and UI-freeze capture, so weigh it before you choose.
Link UXCam with Firebase Crashlytics
Linking the two tools means every crash report points to the session it came from:
Log important user actions: Log the events that matter in your app with UXCam, such as key button taps, completed steps or failed actions.
Record sessions: UXCam records every session automatically. Custom events add context to the recording, which helps when you try to reproduce what led up to a crash.
Add the session URL to crash reports: RNUxcam.urlForCurrentSession() returns the URL of the current session as a Promise. Set it as a Crashlytics custom key when the session starts, because a native crash leaves no time to run code first. Add it to your logs before you report a JavaScript error, too.
Log JavaScript errors to UXCam too: UXCam captures native crashes on its own, but JavaScript exceptions only reach it if you log them. Call RNUxcam.logEvent('js_error') from your ErrorUtils global handler or an error boundary. The error then shows up on the session timeline, right next to the gestures that led to it.
Learn more about session recording and replay for React Native apps with UXCam.
Analyze crashes with enhanced data
Access and review enhanced crash reports
Once each report carries a UXCam session URL, you can go from a crash straight to the session behind it:
Open the crash in the Firebase console: Each report now includes the custom key with the UXCam session URL.
Watch the UXCam session: Follow the URL to watch the recording of the session that ended in the crash. You'll see the user's taps, the screen transitions and the sequence of events that triggered it.
Look at the user interactions
The recording shows what the user did right before the crash. That helps most with UI problems that logs don't explain, and with scenarios that are hard to reproduce.
Check UI elements and interactions: Look for elements that misbehave, such as a button users tap again and again with no response.
Watch for UI freezes: UXCam flags UI freezes that happen before a crash. A freeze right before a crash suggests the main thread was blocked or overloaded.
Use UXCam's analytics
UXCam also shows patterns across many sessions:
Heatmaps: See which areas of each screen get the most interaction. A heavily used area that keeps showing up in crash sessions is worth a closer look.
User journeys: See the paths users take through the app, and whether certain paths lead to crashes more often than others. That can reveal a design flaw or the point where performance starts to drop.
Compare UX insights with technical logs
Use the two tools together:
Cross-reference the data: If a crash keeps following a certain interaction in UXCam, check the Crashlytics logs from the moment of the crash for the cause.
Look at trends: Check both tools over time. If a crash became more common after a release, that tells you where to look and what to test next.
Act on the insights
Then turn what you've learned into changes:
Prioritize bug fixes: Fix the crashes that affect the most users or cause the biggest disruptions first.
Improve the UX design: Change the screens and flows where users run into trouble, so the same crash is less likely to happen again.
Review stability regularly: Check Crashlytics and UXCam together after each release to keep track of your app's stability.
Comparing UXCam and Crashlytics data
Crashlytics and UXCam answer different questions. Crashlytics tells you where the code failed, and UXCam shows what the user was doing when it happened. The table compares the two.
| Feature | UXCam | Crashlytics |
|---|---|---|
| Primary Function | User experience analytics, including session recordings, heatmaps, and user behavior insights | Real-time crash reporting, including crash logs, stack traces, and crash analytics. |
| Crash Reporting | Native crashes, ANRs and UI freezes with stack traces, each linked to the session replay. JavaScript errors can be logged as custom events. | Direct, with detailed stack traces, error logs, and crash analytics |
| Session Recordings | Yes, records user sessions to visualize app usage patterns and issues. | No, focuses on crash data rather than user session visuals. |
| User Interaction Insights | Advanced, includes heatmaps, gesture analysis, and user journey tracking. | Basic, primarily focused on user interaction data related to crashes. |
| Integration | Can be integrated with other analytics tools and services for a holistic view. | Part of Firebase, and works with other Firebase products such as Analytics and Performance Monitoring. |
| Data Granularity | High, with detailed session and behavior data, including screen recordings. | High for crash data: stack traces, device and OS details, custom keys and logs for each crash. |
| Complexity | Moderate, requires additional effort to integrate UXCam SDK and configure settings. | Moderate, involves adding Firebase dependencies and configuring Crashlytics. |
Should you use Crashlytics, UXCam or both?
Use Crashlytics when you need free, reliable crash reporting with readable stack traces. It catches native crashes and unhandled JavaScript errors and groups them by impact, all inside the Firebase console.
Add UXCam when you also need to see what users did before a crash. Link each Crashlytics report to its session replay, and you can fix issues faster while learning how people actually use your app. If you run both, let one tool own native crash handling.
Want to see the sessions behind your crashes? Get started with UXCam and link your first Crashlytics report to a replay.
FAQ
How do I add Crashlytics to a React Native app?
Install @react-native-firebase/app and @react-native-firebase/crashlytics, add your Firebase config files for Android and iOS, run pod install and rebuild the app. Crashlytics then reports crashes automatically. Test the setup by triggering a crash with the crash() method and checking the Firebase console.
Does Crashlytics catch JavaScript errors in React Native?
Yes. React Native Firebase installs its own JavaScript exception handler and turns crashes into reports automatically. For errors your code catches, call recordError() with the Error object to keep its stack trace. Add log() messages and attributes so each report shows what the app was doing.
Does React Native Crashlytics work with Expo?
Yes, with a development build or EAS Build. React Native Firebase uses native code that isn't compiled into Expo Go, so it won't run there. Add the @react-native-firebase/crashlytics config plugin to your app config, then build the app with EAS.
Can I use Crashlytics and UXCam together?
Yes. Let one tool own native crash handling, because two crash handlers can conflict. If Crashlytics owns crashes, set enableCrashHandling to false in UXCam. Then attach the URL from RNUxcam.urlForCurrentSession() to your Crashlytics reports, so each crash links to the session replay.
How do I test Crashlytics in a React Native app?
Trigger a test crash with the crash() method in a debug or release build, then reopen the app so the report uploads. The crash should appear in the Crashlytics section of the Firebase console within a few minutes. Test handled errors by calling recordError() with a JavaScript Error.
You might also be interested in these;
Crashlytics React Native Integration Guide + Best Alternative
Sentry vs Crashlytics - Features, Pricing Comparison & Best Alternative
How to Setup React Native SDK - A Comprehensive Guide
AUTHOR
Tope Longe
Product Analytics Expert
Ardent technophile exploring the world of mobile app product management at UXCam.

Related articles
App Analytics
Contentsquare Pricing 2026: Plans, Costs & Best Alternative
Discover Contentsquare pricing with a comparison of plans, features, and the best alternatives to help you choose the right digital experience analytics...

Product Analytics Expert
App Analytics
React Error Handling: Best Practices for 2026
Discover essential best practices for handling errors in React applications to enhance user experience, improve debugging, and ensure robust...

Product Analytics Expert
App Analytics
The Hotjar for mobile apps: UXCam
Hotjar doesn't support mobile apps. Learn why mobile and web analytics are fundamentally different, what changed after the Contentsquare acquisition, and the best Hotjar alternative for mobile...

Product Analytics Expert