Here a comprehensive guide on how to send push notifications in a React Native application using Firebase Cloud Messaging (FCM).
Prerequisites
- Node.js and npm: Make sure you have Node.js and npm installed.
- React Native CLI: Install React Native CLI if you haven't already.
npm install -g react-native-cli
- Firebase Project: Create a project on the Firebase Console.
- Firebase CLI: Install Firebase CLI to configure your project.
npm install -g firebase-tools
Step-by-Step Guide
1. Create and Configure Firebase Project
- Go to the Firebase Console.
- Click on "Add Project" and follow the prompts to create a new project.
- Navigate to "Cloud Messaging" and copy the Server key and Sender ID. These will be needed later.
2. Set Up React Native Project
- Initialize a new React Native project:
npx react-native init FirebasePushNotification
cd FirebasePushNotification
3. Install Required Packages
- Install Firebase and FCM libraries:
npm install @react-native-firebase/app @react-native-firebase/messaging
4. Configure Firebase with Your React Native App
-
iOS Configuration:
- Navigate to the Firebase Console, select your project, and go to "iOS App."
- Register your app with the iOS bundle ID.
- Download the
GoogleService-Info.plist
file and place it in theios/
directory of your React Native project.
cp GoogleService-Info.plist ios/
- Open the
ios/YourProjectName.xcworkspace
in Xcode. - Drag and drop
GoogleService-Info.plist
into your project. -
Ensure
FirebaseAppDelegateProxyEnabled
is set toYES
in theInfo.plist
.- Android Configuration:
Navigate to the Firebase Console, select your project, and go to "Android App."
Register your app with the Android package name.
Download the
google-services.json
file and place it in theandroid/app
directory.
cp google-services.json android/app/
-
Modify
android/build.gradle
to include the Google services classpath:
dependencies { classpath 'com.google.gms:google-services:4.3.10' }
-
Update
android/app/build.gradle
to apply the Google services plugin:
apply plugin: 'com.google.gms.google-services'
5. Implement Notification Logic
-
iOS Setup:
- Open
ios/YourProjectName/AppDelegate.m
. - Import Firebase and configure it:
#import <Firebase.h>
In the
application:didFinishLaunchingWithOptions
method, configure Firebase:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FIRApp configure]; return YES; }
- Open
-
Android Setup:
- Modify
android/app/src/main/java/com/yourprojectname/MainApplication.java
to include Firebase:
import io.invertase.firebase.app.ReactNativeFirebaseAppPackage;
Update the
getPackages
method:
@Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new ReactNativeFirebaseAppPackage() ); }
- Modify
6. Implement Notification Handling in React Native
- Import and configure messaging in your React Native code:
import messaging from '@react-native-firebase/messaging';
async function requestUserPermission() {
const authStatus = await messaging().requestPermission();
const enabled =
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
if (enabled) {
console.log('Authorization status:', authStatus);
}
}
useEffect(() => {
requestUserPermission();
const unsubscribe = messaging().onMessage(async remoteMessage => {
console.log('A new FCM message arrived!', JSON.stringify(remoteMessage));
});
return unsubscribe;
}, []);
7. Send a Test Notification
-
Using Firebase Console:
- Navigate to the "Cloud Messaging" section of your Firebase project.
- Click "Send your first message" and fill in the required fields. Choose your target device (or all devices).
- Click "Send" to dispatch the notification.
-
Using Firebase Admin SDK (Server-side):
- Set up Node.js and install the Firebase Admin SDK:
npm install firebase-admin
- Initialize the Admin SDK and send a notification:
const admin = require('firebase-admin'); const serviceAccount = require('./path/to/serviceAccountKey.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: 'https://<your-database-name>.firebaseio.com' }); const message = { notification: { title: 'Hello', body: 'World' }, token: '<device-token>' }; admin.messaging().send(message) .then((response) => { console.log('Successfully sent message:', response); }) .catch((error) => { console.log('Error sending message:', error); });
Conclusion
You now have a React Native app set up to receive push notifications via Firebase Cloud Messaging. Ensure you handle permissions, foreground and background notifications correctly in your code to provide a seamless user experience.
Top comments (0)