我已经在Firebase功能上创建了服务器,现在我正在此功能上创建Schedule通知。但是此函数被调用,但不会触发或执行。请帮助如何使用节点JS执行此基于时间的功能。
var date = new Date(2018, 6, 17, 10, 50);
exports.newEvent = functions.firestore.document("Events/{event_id}").onWrite((change, context) => {
console.log('event id', context.params.event_id);
// console.log('Join_event id', context.params.event_id);
const id = context.params.event_id;
return admin.firestore().collection("Events").doc(id).get()
.then(queryResult =>{
const uid=queryResult.data().user;
console.log("User id from event",uid);
const da=queryResult.data().date;
console.log("User id from event",da);
const req = context.params.event_id;
schedule.scheduleJob(date, function(){
console.log('running every 2 minute');
console.log(id);
return admin.firestore().collection("Events").doc(id).get()
.then(queryResult =>{
const uid=queryResult.data().user;
console.log("User id from event",uid);
return admin.firestore().collection("User_data").doc(uid).get()
.then(snapshot2 =>
{
const tid3=snapshot2.data().token_id;
const useremail =snapshot2.data().user_email;
const username =snapshot2.data().user_firstname;
console.log(" User Name: ", username);
console.log(" User Email: ", useremail);
console.log(" Token_id: ",tid3);
const payload3 = {
notification:{
title:username,
body:"Event test notifiction",
icon: "default"
}
};
console.log(payload3);
const options4 = {
priority: "high",
timeToLive: 60 * 60 *24,
content_available: true,
};
return admin.messaging().sendToDevice(tid3, payload3,options4).then(result => {
return console.log('Notify when event time changed');
});
});
});
});
return true;
});
});
我已经创建了演示功能。它准时调用并成功打印日志。
谢谢
答案 0 :(得分:1)
首先,Cloud函数的执行时间限制为60秒,之后该函数实例将不会执行,因此您的cron作业将不会运行。
第二,您正在使用admin sdk在同一节点上的Firestore功能中从Firestore读取数据。您在change
变量中有数据。在此处查看firebase文档:https://firebase.google.com/docs/functions/firestore-events
此外,FCM不支持以后的交货。
对于您的情况,您需要自己的节点服务器,该服务器正在侦听所需的路径。