You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js服务端使用Firebase Cloud Messaging按指定日期时间调度推送通知

FCM 定时发送通知实现方案

Firebase Admin SDK 本身没有提供内置的定时发送API,你可以通过以下两种常见方案实现指定时间调度发送的需求:

方案1:Node 服务端本地集成定时任务库

适合你已经有自建Node服务的场景,可以直接引入定时任务库实现调度:

  • 第一步:安装常用定时任务库 node-schedule
    npm install node-schedule
    
  • 第二步:编写定时发送逻辑,示例如下:
    const schedule = require('node-schedule');
    const admin = require('firebase-admin');
    
    // 此处用你已有的firebase admin初始化逻辑
    // admin.initializeApp(yourConfig);
    
    // 定义圣诞节发送时间:注意JS中月份从0开始计数,11代表12月
    const sendTime = new Date(2024, 11, 25, 0, 0, 0);
    
    // 注册定时任务
    const christmasNotifyJob = schedule.scheduleJob(sendTime, async () => {
      const registrationToken = '目标设备的token';
      const message = {
        notification: {
          title: '圣诞快乐',
          body: '快来领取你的圣诞福利'
        }
      };
      const notify_options = {
        priority: 'high'
      };
    
      try {
        const response = await admin.messaging().sendToDevice(registrationToken, message, notify_options);
        console.log('通知发送成功', response);
      } catch (error) {
        console.error('通知发送失败', error);
      }
    });
    
  • 注意事项:
    • 单实例Node服务下该方案直接可用,多实例部署时需要添加分布式锁避免同一通知重复发送
    • 服务重启时会丢失内存中的定时任务,长期运行的调度建议将任务配置持久化到数据库,服务启动时重新加载

方案2:使用 Firebase 云函数定时触发器

如果你不想在自建服务中维护定时任务,也可以用 Firebase Functions 的定时调度能力:

  • 直接在云函数中定义 Cron 表达式指定触发时间,触发后自动调用FCM发送逻辑即可,无需自己维护服务可用性和任务持久化。

通用注意事项

  • 跨时区场景建议统一使用UTC时间计算定时点,避免时区偏差导致发送时间不符合预期
  • 批量发送前建议先校验registrationToken的有效性,减少无效请求浪费配额
  • 触发发送时要做好异常捕获和重试逻辑,避免偶发网络问题导致发送失败

内容的提问来源于stack exchange,提问作者SDB_1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:24:00