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

如何使用Firebase Messaging调度推送通知至多设备

用Firebase Messaging实现跨设备调度通知的解决方案

核心结论

flutter_local_notifications是本地通知插件,仅能在当前设备触发定时通知,完全不支持跨设备推送。要给一组用户发送调度通知,必须使用Firebase Cloud Messaging(FCM)的云侧调度功能,所有逻辑在Firebase后端完成,不需要在本地插件中处理其他设备令牌。


具体实现步骤

1. 收集并存储目标用户的FCM令牌

用户打开APP并授权通知后,获取其FCM令牌,将这些令牌存入你的数据库(如Firestore、自建服务器数据库):

// Flutter端获取FCM令牌代码
String? token = await FirebaseMessaging.instance.getToken();
// 将token上传至数据库,关联到对应用户

注意:FCM令牌可能会刷新,需监听令牌变化事件,及时更新数据库:

FirebaseMessaging.instance.onTokenRefresh.listen((newToken) {
  // 将数据库中旧令牌替换为newToken
});

2. 通过Firebase Admin SDK创建调度通知

适合批量推送、自定义业务逻辑的场景,以Node.js为例:

const admin = require('firebase-admin');
// 初始化Admin SDK(需下载服务账号密钥)
admin.initializeApp({
  credential: admin.credential.cert('path/to/serviceAccountKey.json')
});

// 从数据库取出目标用户的令牌数组
const targetTokens = ['用户1的token', '用户2的token', '用户3的token'];

// 创建调度通知
admin.messaging().scheduleNotification({
  notification: {
    title: '定时提醒',
    body: '你的预约即将开始'
  },
  // 可选:自定义数据字段,APP端可接收处理
  data: {
    type: 'appointment',
    id: '12345'
  },
  tokens: targetTokens
}, {
  // 设置调度时间,比如明天上午10点
  scheduledTime: new Date('2024-05-20T10:00:00')
})
.then(response => {
  console.log('调度通知已成功创建:', response);
})
.catch(error => {
  console.error('创建调度通知失败:', error);
});

3. 用Firebase Console手动创建调度通知(适合测试/少量推送)

  • 进入Firebase控制台 → 你的项目 → Cloud Messaging → 点击「发送新通知」
  • 填写通知标题、内容,切换到「调度发送」标签,设置推送时间
  • 在「目标」区域:选择「单个设备」输入令牌,或若用户订阅了主题,选择「主题」推送
  • 确认设置后,点击「发送测试消息」或「安排发送」

关键注意事项

  • 令牌有效性:定期清理数据库中无效的令牌(如推送失败返回InvalidRegistration的令牌)
  • 通知权限:确保APP已向用户申请postNotifications权限,且用户已授权
  • 调度时间限制:FCM调度通知支持最多提前4周设置推送时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:56