作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Firebase 控制台内的 Cloud Messaging View 下,用户可以创建测试通知。此功能还允许您安排通知将发送到一个设备或一组设备的时间。
是否可以创建和发送预定 使用 Firebase 云功能和 Firebase Admin SDK 向特定设备发送 FCM 通知?有没有其他方法可以解决这个问题?
我向用户发送预定消息的当前方式是这样的:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const schedule = require('node-schedule');
admin.initializeApp();
exports.setScheduledNotification = functions.https.onRequest(async (req, res) => {
const key = req.query.notification_key;
const message = {
notification: {
title: 'Test Notification',
body: 'Test Notification body.'
}
};
var currentDate = new Date();
var laterDate = new Date(currentDate.getTime() + (1 * 60000));
var job = schedule.scheduleJob(key, laterDate, () => {
const snapshot = admin.messaging().sendToDevice(key, message);
});
return res.status(200).send(`Message has been scheduled.`);
});
首先,我不确定如何
node-schedule
与 firebase 云功能交互。日志显示该功能很快终止,我认为这是正确的。操作运行的时间越长,我们的 Firebase 账单中的成本就越高。尽管如此,通知仍然会在预定的时间运行。我对这一切在幕后如何运作感到困惑。
exports.cancelScheduledNotification = functions.https.onRequest(async (req, res) => {
const key = req.query.notification_key;
var job = schedule.scheduledJobs[key];
job.cancel();
return res.status(200).send(`Message has been canceled.`);
});
是否可以在 firebase 控制台之外利用 firebase 云消息传递的调度功能?还是我一直在解决这个问题?
最佳答案
Cloud Functions 最多可以运行 9 分钟。所以除非你使用 node-schedule
对于比这更短的时间,您当前的方法将不起作用。即使它可以工作,或者如果您提前不到 9 分钟进行安排,使用这种方法也非常不经济,因为您将在等待期间为 Cloud Functions 支付所有费用。
一种更常见的方法是将有关您希望在什么时间发送给谁的消息的信息存储在数据库中,然后使用常规调度函数定期检查要发送的消息。有关这方面的更多信息,请参阅这些先前的问题:
关于firebase - 如何在 Firebase 控制台之外发出预定的 Firebase 云消息传递通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60713668/
我是一名优秀的程序员,十分优秀!