Files
node_task_1c/services/PushNotification.js
2022-10-03 19:59:51 +02:00

91 lines
2.3 KiB
JavaScript

const admin = require('firebase-admin');
class PushNotification {
/**
* Initialize firebase admin
* {@link https://firebase.google.com/docs/admin/setup#initialize-sdk Initialize the SDK}.
*/
constructor() {
this.admin = admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
this.messaging = this.admin.messaging();
}
/**
* Generate payload
* @param {{body: string, title: string, image_url: string}} payload
* @param {admin.messaging.MessagingPayload} override override default payload
*/
generatePayload(payload, override) {
return {
notification: {
body: payload.body,
title: payload.title,
},
data: payload,
apns: {
payload: {
aps: {
'mutable-content': 1,
},
},
fcm_options: {
image: payload.image_url,
},
},
android: {
notification: {
image: payload.image_url,
},
},
...override,
};
}
/**
* Generate options
* @param {admin.messaging.MessagingOptions} override override default options
*/
generateOptions(override) {
return {
contentAvailable: true,
priority: 'high',
timeToLive: 60 * 60 * 24,
...override,
};
}
/**
* Send push notification
* @param {string|string[]} deviceToken
* @param {admin.messaging.MessagingPayload} payload
* @param {admin.messaging.MessagingOptions} options
* @returns {Promise.<admin.messaging.MessagingDevicesResponse>}
* @example
* const pushNotification = new PushNotification();
* const payload = pushNotification.generatePayload({}) // {} = custom configuration
* const options = pushNotification.generateOptions({}); // {} = custom configuration
*
* pushNotification
* .sendPushNotification('device_token', payload, options)
* .then((response) => {
* console.log('message send successfully');
* })
* .catch((error) => {
* console.log('error occurred');
* });
*/
sendPushNotification(deviceToken, payload, options) {
return new Promise((resolve, reject) => {
this.messaging
.sendToDevice(deviceToken, payload, options)
.then((response) => resolve(response))
.catch((error) => reject(error));
});
}
}
module.exports = PushNotification;