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

Flutter特定用户通知需求求助:登录、预订及审批通知实现

解决方案:结合FCM与本地通知实现全场景需求

你提到的这些通知场景,其实可以通过Firebase Cloud Messaging(FCM)+ 本地通知插件的组合完全覆盖,以下是具体实现方案:

一、核心思路

  • 本地通知(推荐flutter_local_notifications):处理登录成功、预订成功即时通知、活动定时提醒这类无需后端触发的场景,无需联网,响应更及时。
  • FCM定向推送:处理申请批准、后台主动触发的预订确认这类需要后端联动的场景,通过用户关联的FCM Token实现精准推送。

二、具体实现步骤

1. 基础准备

  • 确保已集成FCM到你的Flutter项目,获取用户的FCM Token并上传至后端,与用户ID绑定存储(比如存在你的数据库中)。
  • 添加flutter_local_notifications依赖,完成Android端的渠道配置(通知渠道是Android 8.0+的必填项)。

2. 各场景实现

(1)用户登录时发送通知

直接用本地通知即时触发,登录成功后调用:

// 初始化本地通知插件(提前在main函数中完成配置)
final FlutterLocalNotificationsPlugin _localNotification = FlutterLocalNotificationsPlugin();

// 登录成功后执行
void showLoginSuccessNotification() async {
  await _localNotification.show(
    0, // 通知ID,可自定义
    "登录成功",
    "欢迎回来,你的活动预订已就绪",
    NotificationDetails(
      android: AndroidNotificationDetails(
        "login_notification", // 渠道ID
        "登录通知", // 渠道名称
        importance: Importance.max,
        priority: Priority.high,
      ),
    ),
  );
}

(2)用户预订活动时发送通知

  • 即时反馈:用本地通知弹出预订成功提示;
  • 后台确认(可选):如果需要系统级的确认通知,后端根据用户ID查询对应的FCM Token,调用FCM API推送。

后端示例(Node.js + Firebase Admin SDK):

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

// 根据用户ID发送预订确认通知
async function sendBookingConfirm(userId) {
  // 从数据库获取用户的FCM Token
  const user = await db.collection("users").doc(userId).get();
  const fcmToken = user.data().fcmToken;
  if (!fcmToken) return;

  const message = {
    notification: {
      title: "预订成功",
      body: "你已成功预订「XX户外徒步」活动,记得准时参加"
    },
    token: fcmToken
  };

  await admin.messaging().send(message);
}

(3)活动提醒通知

用本地通知的定时调度功能,设置活动开始前的提醒时间(比如提前1小时):

void scheduleEventReminder(DateTime eventStartTime) async {
  // 计算提醒时间:活动开始前1小时
  final remindTime = eventStartTime.subtract(const Duration(hours: 1));
  
  await _localNotification.schedule(
    1, // 通知ID,每个活动用唯一ID避免覆盖
    "活动即将开始",
    "你预订的「XX沙龙」1小时后开始,请做好准备",
    remindTime,
    NotificationDetails(
      android: AndroidNotificationDetails(
        "event_reminder",
        "活动提醒",
        importance: Importance.defaultImportance,
      ),
    ),
    androidAllowWhileIdle: true, // 确保设备休眠时也能触发
  );
}

(4)申请批准通知

这是典型的后端触发定向推送场景:

  1. 管理员在后台批准申请后,后端触发通知逻辑;
  2. 通过用户ID查询对应的FCM Token,调用FCM API发送通知;
  3. Flutter端配置FCM后台消息处理,确保应用在后台/杀死状态下也能收到通知:

Flutter端后台消息处理:

// 全局后台消息回调
Future<void> _firebaseBackgroundMessageHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  // 收到后台消息后,用本地通知弹出
  final _localNotification = FlutterLocalNotificationsPlugin();
  await _localNotification.show(
    message.notification.hashCode,
    message.notification?.title,
    message.notification?.body,
    NotificationDetails(
      android: AndroidNotificationDetails(
        "approval_notification",
        "申请批准通知",
        importance: Importance.max,
      ),
    ),
  );
}

// 在main函数中注册回调
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseMessaging.onBackgroundMessage(_firebaseBackgroundMessageHandler);
  runApp(MyApp());
}

三、关键说明

  • FCM本身完全支持定向推送,你之前觉得不够用可能是没结合用户Token的存储与关联逻辑;
  • 本地通知负责离线/即时/定时场景,FCM负责后端触发的跨设备推送,两者结合能覆盖所有需求;
  • Android端注意配置通知渠道,确保通知能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:40:37