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

如何在Flutter应用中Firebase字段变更时给用户推通知(含应用关闭场景)

实现方案总览

要实现该功能,核心依赖Firebase的后端触发能力+系统级推送能力,不需要应用保持前台运行也能正常触达用户,整体分为4个核心步骤:

步骤1:客户端集成FCM获取设备推送令牌

  • 首先在Flutter项目的pubspec.yaml中添加firebase_messaging依赖,完成Firebase基础配置
  • 用户首次启动应用时主动申请通知权限,权限通过后调用FirebaseMessaging.instance.getToken()获取当前设备的唯一FCM令牌
  • 将该令牌与当前用户的UID绑定,存储到Firebase数据库(Cloud Firestore/Realtime Database均可)对应的用户文档中,推荐字段名为fcmToken
    注意:用户更换设备、卸载重装应用都会导致FCM令牌变更,需要监听令牌更新事件,及时同步数据库中的令牌值

步骤2:配置Cloud Functions监听数据库变更

  • 编写Firebase Cloud Functions触发器,监听目标用户字段所属的文档路径
  • 触发器触发后对比字段变更前后的数值,确认是预期的变更事件后,从用户文档中取出提前存储的fcmToken
  • 按照FCM规范构造通知payload,包含通知标题、正文,可选添加自定义数据字段用于后续点击跳转逻辑
    如果同一用户绑定了多台设备,可以存储多个FCM令牌,触发时遍历所有令牌批量发送即可

示例Cloud Functions代码片段(Node.js环境):

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

// 示例监听Firestore的users集合下用户文档的targetField字段变更
exports.sendNotifyOnFieldUpdate = functions.firestore
  .document('users/{userId}')
  .onUpdate((change, context) => {
    const beforeVal = change.before.data().targetField;
    const afterVal = change.after.data().targetField;
    // 字段未变更直接终止执行
    if (beforeVal === afterVal) return null;
    // 取用户FCM令牌
    const fcmToken = change.after.data().fcmToken;
    // 构造通知内容
    const payload = {
      notification: {
        title: "字段更新提醒",
        body: `你关注的字段已更新为${afterVal}`
      },
      data: {
        "updateField": "targetField",
        "value": afterVal.toString()
      }
    };
    // 发送通知
    return admin.messaging().sendToDevice(fcmToken, payload);
  });

如果使用的是Firebase Realtime Database,只需把触发器替换为functions.database.ref('/users/{userId}').onUpdate()即可,业务逻辑完全一致

步骤3:配置客户端后台/杀死状态下的通知接收逻辑

  • Android端需要在AndroidManifest.xml中配置FCM默认通知渠道,确保应用已申请通知权限
  • iOS端需要在Xcode中开启Push Notifications、Background Modes下的Remote notifications权限,同时在Firebase控制台配置APNs认证信息
  • 完成firebase_messaging集成后,应用处于后台或完全关闭状态时,FCM通知会自动被系统展示在通知栏,不需要额外编写后台保活代码
  • 如果需要实现用户点击通知跳转到应用内指定页面的逻辑,可以监听FirebaseMessaging.onMessageOpenedApp、调用FirebaseMessaging.instance.getInitialMessage()处理不同场景的通知点击事件

步骤4:部署测试

  • 将编写完成的Cloud Functions部署到Firebase云端
  • 手动修改数据库中对应用户的目标字段值,分别测试应用在前台、后台、完全关闭三种状态下的通知接收情况
    注意:iOS模拟器不支持接收推送通知,需要使用真机测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:09:01