如何取消Firebase Cloud Messaging中已调度的通知?
处理Firebase Cloud Messaging中“In Progress”状态调度通知的修改/删除问题
我之前也碰到过一模一样的情况——当调度通知进入“In progress”状态后,Firebase控制台里确实找不到直接修改或删除的选项,这时候得借助Firebase的API来操作,下面是具体的解决步骤:
一、先找到目标通知的调度ID
要操作这条通知,首先得拿到它的唯一scheduledMessageId,有两种方法可以获取:
- 如果创建通知后你没关闭页面,可以打开浏览器的开发者工具(F12),切换到「Network」标签,找到创建通知时的请求(一般是POST到
messages:schedule的请求),在响应里就能找到scheduledMessageId; - 或者用Firebase Admin SDK调用
listScheduledMessages方法,列出所有处于调度状态的通知,从中找到你要处理的那条的ID。
二、删除“In Progress”状态的调度通知
你可以用Admin SDK或者REST API来完成删除操作:
用Firebase Admin SDK(Node.js示例)
先确保你已经初始化了Admin SDK(用服务账号密钥配置),然后运行这段代码:
const admin = require('firebase-admin'); // 这里替换成你的服务账号初始化代码 const serviceAccount = require('./path-to-your-service-account-key.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); // 替换成你找到的调度通知ID const targetScheduledId = 'your-scheduled-message-id-here'; admin.messaging().deleteScheduledMessage(targetScheduledId) .then(() => { console.log('调度通知已成功删除'); }) .catch((err) => { console.error('删除失败,错误信息:', err); });
用REST API
发送一个DELETE请求到以下端点:
https://fcm.googleapis.com/v1/projects/[你的Firebase项目ID]/messages:scheduled/[调度通知ID]
请求头里必须带上授权令牌,格式为Authorization: Bearer [你的访问令牌],这个令牌可以通过Google Cloud的服务账号生成(用gcloud auth application-default print-access-token命令就能快速获取)。
三、修改通知内容的替代方案
遗憾的是,一旦通知进入“In progress”状态,没有直接修改内容的方法,所以可行的办法是:
- 先按照上面的步骤删除原有的调度通知;
- 在Firebase控制台或者用API重新创建一条新的调度通知,设置好正确的文本和执行时间。
额外提一句:如果你的通知还处于“Pending”(待调度)状态,控制台里是能找到编辑和删除按钮的,但一旦状态变成“In progress”,就只能依赖API操作了。
内容的提问来源于stack exchange,提问作者Isabelle Delmas
相关产品推荐
相关产品推荐

