我想在添加到 Firebase 的数据后 1 小时内发送通知,并且想在添加数据 1 天后取消通知。因为我不懂 JavaScript,而且我还是软件世界的新手,我无法弄清楚它的算法,所以我写了类似的东西。 addedNewCard 方法有效,但我无法调整时间。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().functions);
var newData;
exports.addedNewCard =
functions.firestore.document('Users/{userID}/Cards/{cardID}').onCreate(async
(snapshot, context) => {
const cardID = context.params.cardID;
if (snapshot.empty) {
console.log('No Devices');
return;
}
newData = snapshot.data();
const cardAddedDate = newData.cardAddedDate;
const deviceIdTokens = await admin
.firestore()
.collection('DeviceToken')
.get();
var tokens = [];
for (var token of deviceIdTokens.docs) {
tokens.push(token.data().deviceToken);
}
var payload = {
notification: {
title: 'Tekrar vakti',
body: 'Tekrar etmen gereken kelimeler var!!!',
sound: 'default',
},
data: {
click_action: 'FLUTTER_NOTIFICATIoN_CLICK',
sendCardID: cardID,
}
};
const options = {
priority: "high",
};
try {
await admin.messaging().sendToDevice(tokens, payload, options);
console.log('Notification sent successfully');
} catch (err) {
console.log(err);
}
})
exports.timeSettings = functions.pubsub.schedule('every 1 mins').onRun(async
(context) => {
console.log(context.timestamp);
let now = new Date();
const finishWorking = now.setDate(now.getDate + 1);
const finishWorkingStamp = admin.firestore.Timestamp.fromDate(finishWorking);
db.collection('Users/{userID}/Cards').where('cardAddedDate', '<',
finishWorkingStamp).get().then((snap) => {
if (snap.exist) {
snap.forEach(() => {
return addedNewCard();
}).catch((e) => {
return console.log(e);
});
}
});
})
答案 0 :(得分:1)
感谢您的评论,我建议您使用 Cloud Task。借助 Cloud Task,您可以在未来延迟执行。
当用户发送数据时,您可以提前计划24H通知(每15分钟1个通知,持续1天->创建96个任务,下一个比前一个延迟15分钟) .
您有代码示例 here。看看这部分,改变延迟
if (inSeconds) {
// The time when the task is scheduled to be attempted.
task.scheduleTime = {
seconds: inSeconds + Date.now() / 1000,
};
}
答案 1 :(得分:0)
我不会在客户端做日程通知,而是在服务器端配置和发送日程。尝试为客户端创建线程来处理通知。
答案 2 :(得分:0)
您必须创建一个 Firebase 云功能,您需要在其中升级您的 Firebase 帐户订阅并使用 pub-sub。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.scheduledFunctionCrontab = functions.pubsub.schedule('*/15 * * * *').timeZone('Asia/Kolkata').onRun(async (context) => {
console.log('This will be run every 15 minutes');
return null});