gpt4 book ai didi

firebase - 如何在 Firebase 控制台之外发出预定的 Firebase 云消息传递通知?

转载 作者:行者123 更新时间:2023-12-04 12:13:30 31 4
gpt4 key购买 nike

在 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 账单中的成本就越高。尽管如此,通知仍然会在预定的时间运行。我对这一切在幕后如何运作感到困惑。
其次,我在取消这些预定通知时遇到了问题。通知很可能从创建之日起按 2 小时的时间表进行。在 2 小时结束之前,我希望能够使用更新的预定时间取消/覆盖通知。
我尝试这样做来取消通知,但未能找到之前创建的通知。这是代码:
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 scheduled notification in android
  • How to schedule push notifcations for react native expo?
  • Schedule jobs in Firebase
  • Ionic: Is it possible to delay incoming push FCM push notification from showing to my device until a specific time
  • Cloud Functions for Firebase trigger on time?
  • How to create cron jobs dynamically in firebase


  • 最近对此的改进是使用 Cloud Tasks API 以编程方式安排 Cloud Functions 在特定时间使用特定负载调用,然后使用它通过 FCM 发送消息。道格史蒂文森在这里写了一篇很棒的博客文章: How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL) .虽然帖子是关于在特定时间删除文档,但您也可以将其与之前的方法结合来​​安排 FCM 消息。

    最后要注意的一件事:虽然 Firebase Cloud Messaging 会自动处理 的显示通知当应用程序未处于事件状态时发送消息,您也可以使用 仅将其用于传递部分数据消息,然后处理应用程序代码中的所有显示。如果您使用这种方法,您可以立即发送 FCM 数据消息以及显示消息的时间,然后唤醒设备以显示该消息。

    关于firebase - 如何在 Firebase 控制台之外发出预定的 Firebase 云消息传递通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60713668/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com