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

Flutter Firebase应用后端推送通知重复接收问题排查

Flutter Firebase推送重复接收问题解决

问题根源

你遇到的后端推送重复,本质是双重通知触发渠道:

  • Firebase控制台推送只会走系统默认通道,所以只收1次
  • 后端推送如果同时包含notification和data字段,会触发两次:一次是Firebase自动展示系统通知,另一次是你通过onMessage监听后用flutter_local_notifications手动展示

修复方案

1. 调整后端推送格式

后端发送推送时只传data字段,删除notification字段。这样Firebase不会自动展示通知,所有通知都由你的Flutter代码统一处理,从根源避免重复。

2. iOS端AppDelegate.swift检查

不需要额外修改AppDelegate,保持默认配置即可,避免重复处理通知回调:

import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure()
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

不要自行添加UNUserNotificationCenterDelegate的自定义实现,否则会和Flutter插件的处理逻辑冲突。

3. Flutter端统一通知逻辑

确保onMessage监听只在需要的场景触发手动展示,比如仅前台状态:

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  // 仅前台时手动展示通知,后台交给系统处理(或全部统一手动处理)
  if (message.data.isNotEmpty) {
    // 从data字段解析内容,调用flutter_local_notifications展示
    showCustomNotification(message.data);
  }
});

如果要全状态手动处理,需配置后台消息处理onBackgroundMessage,并确保Android/iOS都开启了后台消息权限。

4. Android端配置排查

检查AndroidManifest.xml,确保没有重复注册通知相关的广播接收器,只保留Firebase Messaging和flutter_local_notifications的默认配置即可。

内容的提问来源于stack exchange,提问作者Sahil Nag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:58:21