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

如何基于Firebase实时数据库变更触发云函数发送FCM通知

Firebase Cloud Function 实现实时数据库触发推送通知

前提准备

确保你已经初始化了Firebase Cloud Functions项目,并且安装了必要依赖:

npm install firebase-functions firebase-admin --save

完整index.js代码

const functions = require('firebase-functions');
const admin = require('firebase-admin');

// 初始化Firebase Admin SDK
admin.initializeApp();

// 创建数据库触发器函数
exports.sendNotificationOnUpdate = functions.database.ref('/notification/{userId}/{notificationId}')
    .onWrite(async (change, context) => {
        // 获取变更对应的目标ID(即你说的154578、154580这类ID)
        const targetId = context.params.userId;
        
        // 读取对应ID的FCM令牌
        const fcmTokenSnapshot = await admin.database().ref(`/fcm-token/${targetId}/value`).once('value');
        const fcmToken = fcmTokenSnapshot.val();

        // 如果令牌不存在,直接返回终止执行
        if (!fcmToken) {
            functions.logger.warn(`ID${targetId}未找到FCM令牌`);
            return null;
        }

        // 构造通知内容(可根据业务需求修改字段)
        const notificationPayload = {
            notification: {
                title: '新通知提醒',
                body: '你有一条新的通知消息',
                clickAction: 'FLUTTER_NOTIFICATION_CLICK' // 适配客户端跳转逻辑,无需可删除
            },
            token: fcmToken
        };

        try {
            // 发送FCM通知
            await admin.messaging().send(notificationPayload);
            functions.logger.info(`通知已成功发送给ID${targetId}`);
            return null;
        } catch (error) {
            functions.logger.error(`发送通知失败:${error.message}`);
            return null;
        }
    });

关键逻辑说明

  • 触发器路径:/notification/{userId}/{notificationId} 里的{userId}是通配符,会自动匹配notification节点下的一级子节点ID(如154578),{notificationId}匹配二级子节点(如0)。
  • 提取目标ID:通过context.params.userId直接获取通配符对应的ID值。
  • 读取FCM令牌:定位到fcm-token节点下对应ID的value字段,用once('value')读取单次数据。
  • 异常处理:加入令牌不存在、推送失败的判断和日志输出,避免函数运行报错。

部署函数

在项目根目录执行以下命令完成部署:

firebase deploy --only functions

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:20:35