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
相关产品推荐
相关产品推荐

