Edit File: fcmApn.js
'user strict'; /** * fcm helper functions */ const path = require('path'), DB = require('./db'), i18n_module = require('i18n-nodejs'), { v4: uuidv4 } = require('uuid'); apn = require('apn'), axios = require('axios'), {getAccessToken} = require('./fcm_config/config'), {FCM_SERVER_KEY,API_SECRET,API_KEY,APP_ID}= require("./constVariables"), {COLLAPSE_KEY,FCMURL,options} = require("./constVariables"), config = { "lang" : '', "langFile" : "../../locale.json" }, i18n_ar = new i18n_module(config.lang = "ar", config.langFile), i18n_en = new i18n_module(config.lang = "en", config.langFile); class FCM_APN_HELPER { async send(data,type) { try{ //send fcm notification var sender_name = data.sender_name; var receiver_name = data.receiver_name; var message_ar = ''; var message_en = ''; let message = ''; var apnProvider = new apn.Provider(options); let accessToken = await getAccessToken(); let msg_fcm = {}; DB.query(`SELECT * FROM devices WHERE morph_id = ${data.receiver_id} AND morph_type LIKE '%${data.receiver_type}%'`).then((results, error) => { let dataFcm = { apiKey : API_KEY, secretKey : API_SECRET, application_id : APP_ID, token : data.token, session_id : data.session_id, sender_name : sender_name, image : data.sender_image, call_type : data.call_type, sender_id : String(data.sender_id), receiver_id : String(data.receiver_id), type : type, order_id : String(data.order_id), room_id : String(data.room_id), title_ar : sender_name, title_en : sender_name, order_call_type : data.order_call_type, message_ar : i18n_ar.__("Message {{sender_name}}",{sender_name:sender_name}), message_en : i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}), body_ar : i18n_ar.__("Message {{sender_name}}",{sender_name:sender_name}), body_en : i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}), }; if(data.status === 'start'){ dataFcm.title = sender_name; dataFcm.body = i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}); dataFcm.body_en = i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}); dataFcm.body_ar = i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}); dataFcm.message_ar = i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}); dataFcm.message_en = i18n_en.__("Message {{sender_name}}",{sender_name:sender_name}); dataFcm.type = 'newCall'; }else if(data.status === 'end'){ dataFcm.title = receiver_name; dataFcm.body = i18n_en.__("Cancel {{receiver_name}}",{receiver_name:receiver_name}); dataFcm.body_en = i18n_en.__("Cancel {{receiver_name}}",{receiver_name:receiver_name}); dataFcm.body_ar = i18n_ar.__("Cancel {{receiver_name}}",{receiver_name:receiver_name}); dataFcm.message_ar = i18n_ar.__("Cancel {{receiver_name}}",{receiver_name:receiver_name}); dataFcm.message_en = i18n_en.__("Cancel {{receiver_name}}",{receiver_name:receiver_name}); dataFcm.type = 'cancel' }else{ dataFcm.title = 'undefined' dataFcm.body = 'undefined' } results.forEach((row) => { if(row.device_type == 'ios') { dataFcm.aps = { "content-available": true,"mutable-content" : true }; dataFcm["content-available"]=1; dataFcm["mutable-available"]=1; dataFcm.uuid = uuidv4(); let notify = new apn.Notification(); notify.expiry = Math.floor(Date.now() / 1000) + 60; notify.body = dataFcm.body ; notify.title = dataFcm.title; notify.sound = "default"; notify.topic = 'com.aait.thandarUser.voip'; notify.payload = dataFcm; notify.priority = 10; notify.pushType = "alert"; if(row.voip_id){ apnProvider.send(notify, row.voip_id).then( (result) => { console.log("result apn",result); }); }else{ console.log("no apn"); } } else if (row.device_type == 'android') { dataFcm.priority = "high"; dataFcm.timeToLive = "60"; message = { token : row.device_id, notification : null, data : dataFcm }; msg_fcm = {"message":message} axios.post(FCMURL, msg_fcm, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json' } }) .then(response => { console.log('Message sent successfully:'); }) .catch(error => { console.log(error.response.data) console.log(error.response.data.details) console.error('Error sending message:'); }); } else{ dataFcm.priority = "high"; dataFcm.timeToLive = "60"; message = { token : row.device_id, notification : { title : dataFcm.title, body : dataFcm.body }, data : dataFcm }; msg_fcm = {"message":message} axios.post(FCMURL, msg_fcm, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json' } }) .then(response => { console.log('Message sent successfully:'); }) .catch(error => { console.log(error.response.data.error.details) console.error('Error sending message:'); }); } }); }); //end send fcm }catch (error){ console.log(error) } } } module.exports = new FCM_APN_HELPER();
Back to File Manager