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

如何通过Firebase Cloud Messaging向Flutter应用发送定时通知

解决FCM定时发送预约提醒通知的问题

你尝试的请求里isScheduled和scheduledTime这两个字段是无效的——FCM的fcm/send API本身不支持直接设置定时发送,这些自定义参数只会被当作通知的附加数据,不会触发定时逻辑。

下面是几种可行的实现方案:

方案1:后端自建定时任务(最常用)

这是可靠性最高的方式,步骤很直接:

  • 把所有需要发送的预约提醒任务存在数据库里,记录清楚目标发送时间(预约前5分钟)、FCM推送目标(令牌/主题)、通知标题和内容
  • 用后端的定时任务框架,比如Java的Quartz、Python的APScheduler、Node.js的node-schedule,到点就调用FCM的fcm/send API发即时通知
  • 注意处理时区问题,确保发送时间和用户所在时区匹配

举个Node.js的简单示例:

const schedule = require('node-schedule');
const axios = require('axios');

// 从数据库取出的预约任务示例
const reminderTask = {
  sendTime: new Date('2023-01-12T14:27:00'), // 预约前5分钟
  target: '/topics/installers',
  notification: {
    title: '预约提醒',
    body: '距离您的预约还有5分钟,请做好准备'
  }
};

// 定时触发发送
schedule.scheduleJob(reminderTask.sendTime, async () => {
  try {
    await axios.post('https://fcm.googleapis.com/fcm/send', {
      to: reminderTask.target,
      notification: reminderTask.notification
    }, {
      headers: {
        'Authorization': 'key=你的FCM服务器密钥',
        'Content-Type': 'application/json'
      }
    });
    console.log('定时通知发送成功');
  } catch (err) {
    console.error('发送失败:', err);
  }
});

方案2:用Firebase生态工具实现

如果你的项目已经在用Firebase,可以结合Cloud Functions和Cloud Scheduler:

  • 写一个Cloud Function,里面实现调用FCM发送通知的逻辑
  • 用Cloud Scheduler创建定时任务,到点触发这个Cloud Function,同时传递通知的目标、内容等参数
  • 这种方式不用自己维护后端服务器,适合轻量级场景

方案3:客户端本地定时(不推荐)

也可以在用户设备本地设置定时任务,到点后调用FCM客户端API发通知,但缺点很多:

  • 设备必须保持开机、APP不能被系统杀死,否则定时会失效
  • Android和iOS的系统定时机制行为不一致,适配成本高
  • 没法统一管理所有用户的提醒,修改或取消任务很麻烦

优先推荐前两种方案,能确保通知按时、可靠地发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:31:05