如何使用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
相关产品推荐
相关产品推荐

