A library to subscribe to GCM/FCM and receive notifications within a node process.
For Electron, you can use electron-push-receiver instead which provides a convenient wrapper.
See this blog post for more details.
- I want to receive push notifications sent using Firebase Cloud Messaging in an electron desktop application.
- I want to communicate with a node process/server using Firebase Cloud Messaging infrastructure.
- I want to send push notifications (use the firebase SDK instead)
- My application is running on a FCM supported platform (Android, iOS, Web).
npm i -S @hieudevx/push-receiver
- Node v16 (async/await/randomUUID support)
- Firebase sender id to receive notification
- Firebase serverKey to send notification (optional)
interface ClientConfig {
credentials?: Credentials; // Will be generated if missing - save this after first use!
persistentIds?: PersistentId[]; // Default - []
senderId: string; // Required
bundleId?: string; // Default - 'receiver.push.com'
chromeId?: string; // Default - 'org.chromium.linux'
chromeVersion?: string; // Default - '94.0.4606.51'
skipFcmRegistration?: boolean; // Default - false
logLevel?: keyof typeof LogLevels; // 'NONE'|'DEBUG'|'VERBOSE' - default: 'NONE'
vapidKey?: string; // Default - default firebase VAPID key
heartbeatIntervalMs?: number; // Default - 5 * 60 * 1000
}
import PushReceiver from "@hieudevx/push-receiver";
import { argv as parsedArgs } from "yargs";
if (!parsedArgs.senderId) {
console.error("Missing senderId");
return;
}
(async () => {
const instance = new PushReceiver({
logLevel: parsedArgs.logLevel || "DEBUG",
senderId: parsedArgs.senderId,
persistentIds: [], // Recover stored ids of all previous notifications
});
const stopListeningToCredentials = instance.onCredentialsChanged(({ oldCredentials, newCredentials }) => {
console.log("Client generated new credentials.", newCredentials);
// Save them somewhere! And decide if thing are needed to re-subscribe
});
const stopListeningToNotifications = instance.onNotification(({ notification }) => {
// Do someting with the notification
console.log("Notification received", notification);
});
await instance.connect();
if (parsedArgs.serverId) {
await instance.testMessage(parsedArgs.serverId);
}
stopListeningToCredentials();
stopListeningToNotifications();
instance.destroy();
})();