Flutter FCM在Android设备上无法显示通知弹窗问题求助
Realme RMX3370(Android 13)上Firebase前台通知不弹窗的解决方案
针对你遇到的「能收到Firebase消息但不显示通知弹窗」问题,结合Realme ColorOS的特性和Android 13的权限规则,按以下步骤排查修复:
1. 检查ColorOS专属通知权限
Realme的ColorOS会对通知做额外限制,即便你申请了Android系统的POST_NOTIFICATIONS权限,仍需手动开启应用的弹窗权限:
- 打开设备「设置」→「通知与状态栏」→「应用通知管理」
- 找到你的应用,确保「允许通知」开关开启
- 开启「横幅通知」「锁屏通知」(如果需要),并将通知类别设为「重要」
2. 配置高优先级通知渠道(Android 13强制要求)
Android 13及以上版本,通知必须绑定渠道,且只有高优先级渠道的通知才能弹窗。在Android原生代码中创建渠道(可放在MainActivity或自定义Application类中):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val notificationChannel = NotificationChannel( "push_channel", // 自定义渠道ID,需和Flutter端一致 "推送通知", NotificationManager.IMPORTANCE_HIGH // 必须设为高优先级 ).apply { description = "接收Firebase推送通知" enableVibration(true) setShowBadge(true) } val notificationManager = getSystemService(NotificationManager::class.java) notificationManager.createNotificationChannel(notificationChannel) }
3. 手动处理前台通知弹窗
FirebaseMessaging.onMessage监听的是前台消息,Firebase不会自动弹窗,需借助flutter_local_notifications包手动构建并显示通知:
第一步:添加依赖到pubspec.yaml
dependencies: flutter_local_notifications: ^16.1.0 # 使用最新稳定版本
第二步:初始化通知插件
final FlutterLocalNotificationsPlugin _notificationsPlugin = FlutterLocalNotificationsPlugin(); Future<void> initNotifications() async { const AndroidInitializationSettings androidInitSettings = AndroidInitializationSettings('@mipmap/ic_launcher'); const InitializationSettings initSettings = InitializationSettings(android: androidInitSettings); await _notificationsPlugin.initialize(initSettings); }
在main函数或页面initState中调用initNotifications()完成初始化。
第三步:在onMessage回调中显示通知
FirebaseMessaging.onMessage.listen((RemoteMessage message) { final RemoteNotification? notification = message.notification; final AndroidNotification? android = message.notification?.android; if (notification != null && android != null) { _notificationsPlugin.show( notification.hashCode, notification.title, notification.body, NotificationDetails( android: AndroidNotificationDetails( "push_channel", // 和原生渠道ID完全一致 "推送通知", importance: Importance.high, priority: Priority.high, icon: android.smallIcon, ), ), ); } });
4. 确认AndroidManifest配置正确性
确保清单文件中包含必要权限和Firebase服务配置:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
5. 后台通知额外配置
如果后台消息也不弹窗,需将应用加入Realme的后台白名单:
- 打开「设置」→「电池」→「应用耗电管理」
- 找到你的应用,设置为「允许后台活动」,关闭「智能省电」模式
内容的提问来源于stack exchange,提问作者Nguyễn Đức Thành
相关产品推荐
相关产品推荐

