我想在 Node 中使用 FCM 添加推送通知的东西.js .为此我试过这个
还有这个,还有这个
我的节点代码
var FCM = require('fcm-node');
var serverkey = 'SERVERKEY';
var fcm = new FCM(serverkey);
var message = {
to : req.body.userToken,
collapse_key : 'XXX',
data : {
my_key: 'my value', contents: "abcv/"
},
notification : {
title : 'Title of the notification',
body : 'Body of the notification'
}
};
fcm.send(message, function(err,response){
if(err) {
console.log(message);
console.log("Something has gone wrong !");
} else {
console.log("Successfully sent with resposne :",response);
}
});
每当我尝试运行此代码并启动服务器时,我总是在控制台中收到此错误。
/var/www/html/chatApp/node_modules/fcm-node/lib/fcm.js:10
function FCM(accountKey, proxy_url=null) {
^
SyntaxError: Unexpected token =
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/var/www/html/chatApp/node_modules/fcm-node/index.js:1:80)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
谁能解释一下我做错了什么?
我使用了Firebase-admin软件包来发送通知(https://firebase.google.com/docs/cloud-messaging/admin/send-messages(
var admin = require("firebase-admin");
var serviceAccount = require("./firebase-adminSDK.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
const messaging = admin.messaging()
var payload = {
notification: {
title: "This is a Notification",
body: "This is the body of the notification message."
},
topic: 'topic'
};
messaging.send(payload)
.then((result) => {
console.log(result)
})
Firebase-adminSDK.json可以按照 https://firebase.google.com/docs/admin/setup#add_firebase_to_your_app 中的步骤下载
此代码将向主题"主题"发送通知,但是,Firebase-admin软件包允许向特定设备发送通知。
我已经分享了使用 env 文件集成 fcm 通知以保持私钥机密的方法。 我已使用此库发送此 https://www.npmjs.com/package/firebase-admin
下面的代码是向单个或多个用户发送通知,您只需要在数组中传递令牌即可。
import * as admin from 'firebase-admin';
import config from '../config/default';
const pkey = process.env.private_key.replace(/\n/g, 'n');
const creden = {
type: 'service_account',
project_id: process.env.PROJECT_ID,
private_key_id: pkey,
private_key: process.env.PRIVATE_KEY,
client_email: process.env.CLIENT_EMAIL,
client_id: process.env.CLIENT_ID,
auth_uri: process.env.AUTH_URI,
token_uri: process.env.TOKEN_URI,
auth_provider_x509_cert_url: process.env.AUTH_PROVIDER_CERT_URL,
client_x509_cert_url: process.env.CLIENT_CERT_URL
}
const credentialObject:object = creden;
admin.initializeApp({
credential: admin.credential.cert(credentialObject)
});
export default admin;
此代码在不同的文件中,发送通知的功能
import admin from '../config/firebase-config';
export default async function fcmSend(notification:any, registrationTokens: any, extraData:any) {
if(!extraData){
extraData = null
}
let returnData = null;
try {
registrationTokens = _.uniq(registrationTokens);
if(registrationTokens.length === 0) {
console.log("Empty token");
return
}
let message = {
notification: notification,
"android": {
"notification": {
"sound": "default"
}
},
"apns": {
"payload": {
"aps": {
"sound": "default"
}
}
},
tokens: registrationTokens,
data: {
...notification,
icon:''
},
"webpush": {
"headers": {
"Urgency": "high"
}
}
}
const messaging = admin.messaging();
await messaging.sendMulticast(message)
.then((response) => {
//console.log(response);
if (response.failureCount > 0) {
const failedTokens:any = [];
response.responses.forEach((resp, idx) => {
if (!resp.success) {
failedTokens.push(registrationTokens[idx])
}
});
console.log('List of tokens that caused failures: ' + failedTokens)
returnData = failedTokens
return failedTokens
}
returnData = response;
}).catch(e =>{
console.log(e);
});
} catch (e) {
returnData = false;
console.log(e);
}
return returnData;
}