Flutter应用被杀死后Firebase通知无法显示问题求助
Flutter Firebase通知在应用杀死后不显示的解决方案
针对你遇到的应用前台/后台未杀死时通知正常,杀死后无法显示的问题,可按以下步骤排查修复:
1. 补充Firebase消息服务配置到AndroidManifest.xml
你的AndroidManifest.xml中缺少Firebase Messaging Service的声明,导致系统无法在应用杀死后触发消息处理。添加以下代码到<application>标签内:
<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
如果不需要自定义服务,也可以使用Firebase默认实现,将android:name改为com.google.firebase.messaging.FirebaseMessagingService。
2. 在后台消息处理器中主动创建本地通知
当应用被杀死时,系统不会自动展示Firebase消息,必须通过本地通知插件手动创建。首先确保依赖flutter_local_notifications,然后修改_firebaseMessagingBackgroundHandler:
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'dart:convert'; final FlutterLocalNotificationsPlugin _localNotifications = FlutterLocalNotificationsPlugin(); Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); print("Handling a background message: ${message.messageId}"); // 初始化本地通知(后台环境需单独初始化) const AndroidInitializationSettings androidInit = AndroidInitializationSettings('@mipmap/ic_launcher'); const InitializationSettings initSettings = InitializationSettings(android: androidInit); await _localNotifications.initialize(initSettings); // 构建并显示通知 const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'notification_channel_id', '通知渠道名称', channelDescription: '用于展示Firebase后台通知', importance: Importance.max, priority: Priority.high); const NotificationDetails notificationDetails = NotificationDetails(android: androidDetails); await _localNotifications.show( message.hashCode, message.notification?.title ?? '新通知', message.notification?.body ?? '您有一条新消息', notificationDetails, payload: json.encode(message.data)); }
3. 初始化Android通知渠道(Android 8.0+要求)
Android 8.0及以上系统需要提前创建通知渠道,在main方法中添加初始化代码:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 创建通知渠道 const AndroidNotificationChannel channel = AndroidNotificationChannel( 'notification_channel_id', '高优先级通知', description: '接收Firebase后台消息的通知渠道', importance: Importance.high, ); await _localNotifications .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); // 其他初始化逻辑... runApp(YourApp()); }
4. 检查消息类型与发送方式
- 确保发送的是包含
notification字段的通知消息,而非纯数据消息。纯数据消息需要完全手动处理展示逻辑。 - 如果通过Firebase控制台发送,确认勾选了"通知"选项卡,而非仅"数据"选项卡。
5. 补充Android 13+通知权限
针对Android 13及以上设备,添加POST_NOTIFICATIONS权限到AndroidManifest.xml的<uses-permission>区域:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
完成以上步骤后,重新打包测试应用杀死后的通知接收情况。
内容的提问来源于stack exchange,提问作者YourDeveloper
相关产品推荐
相关产品推荐

