Install “react-native-firebase”
yarn add @react-native-firebase/app
yarn add @react-native-firebase/app
yarn add @react-native-firebase/app
Android
- Download “google-services.json” file from Firebase Android
- There is step of generating debug signing certificate
https://round.fun/2020/05/07/android-development-setup/
- There is step of generating debug signing certificate
- Paste “google-services.json” to “android\app\” folder
- Edit “/android/build.gradle“
buildscript {
dependencies {
// ... other dependencies
classpath 'com.google.gms:google-services:4.2.0'
// Add me --- /\
}
}
buildscript {
dependencies {
// ... other dependencies
classpath 'com.google.gms:google-services:4.2.0'
// Add me --- /\
}
}
buildscript { dependencies { // ... other dependencies classpath 'com.google.gms:google-services:4.2.0' // Add me --- /\ } }
- Edit “/android/app/build.gradle“
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // <- Add this line
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // <- Add this line
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // <- Add this line
iOS
- Download “GoogleService-Info.plist” file from Firebase iOS
- Open iOS app from XCode, add “GoogleService-Info.plist” into project

- Fix AppDelegate.m
https://rnfirebase.io/#configure-firebase-with-ios-credentials
Autolinking & rebuilding
npx react-native run-android
# iOS apps
cd ios/
pod install --repo-update
cd ..
npx react-native run-ios
npx react-native run-android
# iOS apps
cd ios/
pod install --repo-update
cd ..
npx react-native run-ios
npx react-native run-android # iOS apps cd ios/ pod install --repo-update cd .. npx react-native run-ios
Install FCM
yarn add @react-native-firebase/messaging
yarn add @react-native-firebase/messaging
yarn add @react-native-firebase/messaging
Configure iOS app
- Turn on capabilities

- Create p8 file and upload p8 file to Firebase
https://round.fun/2020/08/01/mobile-app-how-to-configure-push-notification-with-firebase/ - Create push notification certificate
https://round.fun/2020/08/01/mobile-app-how-to-configure-push-notification-with-firebase/
Create FCM class
import messaging from '@react-native-firebase/messaging';
export class FCMService {
// Check permission
async checkPermission() {
const enabled = await messaging().hasPermission();
// If Permission granted proceed towards token fetch
if (enabled) {
this.getToken();
} else {
// If permission hasn’t been granted to our app, request user in requestPermission method.
this.requestPermission();
}
}
// Request permission
async requestPermission() {
const authStatus = await messaging().requestPermission();
const enabled =
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
if (enabled) {
this.getToken();
}
}
// Get device token
async getToken() {
try {
const fcmToken = await messaging().getToken();
if (fcmToken) {
// this.saveTokenToDatabase(fcmToken);
}
} catch (error) {
console.log('FCM Service: User does not have a device token', error);
}
}
// Refresh device token
async refreshToken() {
messaging().onTokenRefresh((token) => {
// this.saveTokenToDatabase(token);
});
}
// Listen notification tapped
async createNotificationListeners() {
// This listener triggered when notification has been received in foreground
messaging().onMessage(async (remoteMessage) => {
console.log('A new FCM message arrived!', remoteMessage);
});
// This listener triggered when app is in background and we click, tapped and opened notification
messaging().onNotificationOpenedApp((remoteMessage) => {
console.log(
'Notification caused app to open from background state:',
remoteMessage.notification
);
});
// This listener triggered when app is closed and we click,tapped and opened notification
messaging()
.getInitialNotification()
.then((remoteMessage) => {
if (remoteMessage) {
console.log(
'Notification caused app to open from quit state:',
remoteMessage.notification
);
}
});
}
}
import messaging from '@react-native-firebase/messaging';
export class FCMService {
// Check permission
async checkPermission() {
const enabled = await messaging().hasPermission();
// If Permission granted proceed towards token fetch
if (enabled) {
this.getToken();
} else {
// If permission hasn’t been granted to our app, request user in requestPermission method.
this.requestPermission();
}
}
// Request permission
async requestPermission() {
const authStatus = await messaging().requestPermission();
const enabled =
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
if (enabled) {
this.getToken();
}
}
// Get device token
async getToken() {
try {
const fcmToken = await messaging().getToken();
if (fcmToken) {
// this.saveTokenToDatabase(fcmToken);
}
} catch (error) {
console.log('FCM Service: User does not have a device token', error);
}
}
// Refresh device token
async refreshToken() {
messaging().onTokenRefresh((token) => {
// this.saveTokenToDatabase(token);
});
}
// Listen notification tapped
async createNotificationListeners() {
// This listener triggered when notification has been received in foreground
messaging().onMessage(async (remoteMessage) => {
console.log('A new FCM message arrived!', remoteMessage);
});
// This listener triggered when app is in background and we click, tapped and opened notification
messaging().onNotificationOpenedApp((remoteMessage) => {
console.log(
'Notification caused app to open from background state:',
remoteMessage.notification
);
});
// This listener triggered when app is closed and we click,tapped and opened notification
messaging()
.getInitialNotification()
.then((remoteMessage) => {
if (remoteMessage) {
console.log(
'Notification caused app to open from quit state:',
remoteMessage.notification
);
}
});
}
}
import messaging from '@react-native-firebase/messaging'; export class FCMService { // Check permission async checkPermission() { const enabled = await messaging().hasPermission(); // If Permission granted proceed towards token fetch if (enabled) { this.getToken(); } else { // If permission hasn’t been granted to our app, request user in requestPermission method. this.requestPermission(); } } // Request permission async requestPermission() { const authStatus = await messaging().requestPermission(); const enabled = authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL; if (enabled) { this.getToken(); } } // Get device token async getToken() { try { const fcmToken = await messaging().getToken(); if (fcmToken) { // this.saveTokenToDatabase(fcmToken); } } catch (error) { console.log('FCM Service: User does not have a device token', error); } } // Refresh device token async refreshToken() { messaging().onTokenRefresh((token) => { // this.saveTokenToDatabase(token); }); } // Listen notification tapped async createNotificationListeners() { // This listener triggered when notification has been received in foreground messaging().onMessage(async (remoteMessage) => { console.log('A new FCM message arrived!', remoteMessage); }); // This listener triggered when app is in background and we click, tapped and opened notification messaging().onNotificationOpenedApp((remoteMessage) => { console.log( 'Notification caused app to open from background state:', remoteMessage.notification ); }); // This listener triggered when app is closed and we click,tapped and opened notification messaging() .getInitialNotification() .then((remoteMessage) => { if (remoteMessage) { console.log( 'Notification caused app to open from quit state:', remoteMessage.notification ); } }); } }
Call FCM class
import { FCMService } from './source/_services/fcmService';
const fcmService = new FCMService();
const App = () => {
useEffect(() => {
fcmService.checkPermission();
fcmService.createNotificationListeners();
}, []);
return <></>
};
export default App;
import { FCMService } from './source/_services/fcmService';
const fcmService = new FCMService();
const App = () => {
useEffect(() => {
fcmService.checkPermission();
fcmService.createNotificationListeners();
}, []);
return <></>
};
export default App;
import { FCMService } from './source/_services/fcmService'; const fcmService = new FCMService(); const App = () => { useEffect(() => { fcmService.checkPermission(); fcmService.createNotificationListeners(); }, []); return <></> }; export default App;
Test FCM from Firebase
- You can see notification alerts when app is in background or closed
- No notification alert is displayed when app is in foreground, this is stated here
If theRemoteMessage
payload contains anotification
property when sent to theonMessage
handler, the device will not show any notification to the user. Instead, you could trigger a local notification or update the in-app UI to signal a new notification.
https://rnfirebase.io/messaging/usage#foreground-state-messages

Configure background handler
When the application is in a background or quit state, the onMessage
handler will not be called when receiving messages. Instead, you need to setup a background callback handler via the setBackgroundMessageHandler
method.
https://rnfirebase.io/messaging/usage#background–quit-state-messages
Leave a Reply