To implement push notifications using Firebase Cloud Messaging (FCM) in a Node.js application, you need to handle FCM token storage and manage token updates for each user. Here's a step-by-step guide:
1. Set Up Firebase in Your Node.js Project
First, you need to set up Firebase in your Node.js project.
i. Install Firebase Admin SDK:
npm install firebase-admin
ii. Initialize Firebase in your Node.js app:
const admin = require('firebase-admin');
const serviceAccount = require('path/to/your/serviceAccountKey.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
2. Save FCM Token for Each User
You need a database to store the FCM tokens. For this example, we'll use MongoDB.
i. Install Mongoose:
npm install mongoose
ii. Set Up Mongoose and Define User Schema:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/your-database', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const userSchema = new mongoose.Schema({
userId: { type: String, required: true, unique: true },
fcmToken: { type: String, required: true },
});
const User = mongoose.model('User', userSchema);
iii. API to Save/Update FCM Token:
const express = require('express');
const app = express();
app.use(express.json());
app.post('/save-token', async (req, res) => {
const { userId, fcmToken } = req.body;
try {
let user = await User.findOne({ userId });
if (user) {
user.fcmToken = fcmToken;
await user.save();
} else {
user = new User({ userId, fcmToken });
await user.save();
}
res.status(200).send('Token saved/updated successfully.');
} catch (error) {
res.status(500).send('Internal Server Error');
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
3. Send Notifications
i. Function to Send Notification:
const sendNotification = async (userId, message) => {
try {
const user = await User.findOne({ userId });
if (!user) {
throw new Error('User not found');
}
const payload = {
notification: {
title: message.title,
body: message.body,
},
token: user.fcmToken,
};
const response = await admin.messaging().send(payload);
console.log('Successfully sent message:', response);
} catch (error) {
console.error('Error sending message:', error);
}
};
ii. API to Trigger Notification:
app.post('/send-notification', async (req, res) => {
const { userId, message } = req.body;
try {
await sendNotification(userId, message);
res.status(200).send('Notification sent successfully.');
} catch (error) {
res.status(500).send('Internal Server Error');
}
});
Summary
- Set up Firebase and MongoDB.
- Create endpoints to save/update FCM tokens.
- Create a function and endpoint to send notifications.
Testing
- Save/Update Token:
curl -X POST http://localhost:3000/save-token -H "Content-Type: application/json" -d '{"userId": "user123", "fcmToken": "your-fcm-token"}'
- Send Notification:
curl -X POST http://localhost:3000/send-notification -H "Content-Type: application/json" -d '{"userId": "user123", "message": {"title": "Hello", "body": "World"}}'
Make sure you replace "path/to/your/serviceAccountKey.json"
with the actual path to your Firebase service account key JSON file. Also, ensure your MongoDB instance is running and replace the connection string with your actual MongoDB connection string.
Top comments (0)