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 @eneris/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
}
import PushReceiver from '@eneris/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()
})()