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,apiSecret,apiKey,options} = require("./constVariables"), {COLLAPSE_KEY,FCMURL,appId} = 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 FCM = require('fcm-node'); // var serverKey = FCM_SERVER_KEY; // var fcm = new FCM(serverKey); 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(); DB.query(`SELECT * FROM devices WHERE user_id = ${data.receiver_id}`).then((results, error) => { let dataFcm = { apiKey : apiKey, secretKey : apiSecret, token : data.token, session_id : data.session_id, application_id : appId, 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), // timer : data.timer, type : type, order_id : String(data.order_id), title_ar : sender_name, title_en : sender_name, 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.status = '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.status = '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 = (data.receiver_type == "User")?'com.aait.guideUser.voip':'com.aait.guideProvider.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') { console.log("aaaaaa=>") dataFcm.priority = "high"; dataFcm.timeToLive = "60"; message = { token : row.device_id, notification : null, data : dataFcm }; let 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{ data.priority = "high"; data.timeToLive = 60; message = { token : row.device_id, notification : null, data : dataFcm }; fcm.send(message, function(err, responseData){ if(err){ console.log(err); }else{ console.log("sucess") } }); } }); }); //end send fcm }catch (error){ console.log("catch",error) } } } module.exports = new FCM_APN_HELPER();
Back to File Manager