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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:17