Flutter中App关闭时无法接收FCM消息的问题求助
Flutter FCM + 本地通知在Android 12上的问题修复
问题1:应用终止后FCM消息被取消(Logcat显示CANCELLED)
核心原因
- Android 12对后台组件启动限制更严格,你的
AndroidManifest.xml缺少FCM必需的服务与广播接收器配置 - 后台消息处理函数未初始化Firebase,导致无法在应用进程终止时处理消息
修复步骤
补充AndroidManifest配置
在<application>标签内添加以下FCM相关配置:<!-- 新增FCM所需权限 --> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <!-- FCM消息处理服务 --> <service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <!-- C2DM广播接收器,处理高优先级消息 --> <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="${applicationId}"/> </intent-filter> </receiver>修正后台消息处理函数
后台消息处理函数必须先初始化Firebase,才能正常处理并展示通知:Future<void> _onBackgroundMessageHandler(RemoteMessage message) async { // 必须初始化Firebase await Firebase.initializeApp(); FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // 初始化本地通知配置 const AndroidInitializationSettings androidInitializationSettings = AndroidInitializationSettings('launch_background'); const InitializationSettings initializationSettings = InitializationSettings(android: androidInitializationSettings); await flutterLocalNotificationsPlugin.initialize(initializationSettings); // 配置高优先级通知参数 var androidDetails = const AndroidNotificationDetails( 'com.test.app.notification_channel', 'Test Notification Channel', channelDescription: 'Notification Channel for Test App for Android', priority: Priority.high, importance: Importance.max, ); var generalNotificationDetails = NotificationDetails(android: androidDetails); // 展示后台通知 if (message.notification != null) { await flutterLocalNotificationsPlugin.show( message.notification.hashCode, message.notification?.title, message.notification?.body, generalNotificationDetails, payload: jsonEncode(message.data), ); } debugPrint('Background FCM NOTIFICATION[#${message.messageId}] - Data: ${message.data} Title: ${message.notification?.title} Body: ${message.notification?.body}'); }
问题2:前台通知仅在托盘显示,不弹窗
核心原因
AndroidNotificationDetails未设置importance: Importance.max,Android 12要求明确指定高重要性才能触发弹窗提示。
修复步骤
修改_setupPushNotification中的androidDetails配置:
var androidDetails = const AndroidNotificationDetails( 'com.test.app.notification_channel', 'Test Notification Channel', channelDescription: 'Notification Channel for Test App for Android', priority: Priority.high, importance: Importance.max, // 新增此行,确保通知弹窗 enableVibration: true, // 可选:增强通知提示 enableLights: true, );
同时检查Android系统的应用通知设置,确保对应通知渠道处于启用状态。
内容的提问来源于stack exchange,提问作者Ariel
相关产品推荐
相关产品推荐

