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

Flutter中Firebase Cloud Messaging通知图标修改及变灰问题求助

解决Flutter+FCM推送通知图标变灰色的问题

问题根源

Android 5.0(API 21)及以上版本对通知栏图标有强制规范:通知栏内的图标必须是仅白色+透明背景的单色图,系统会自动将图标中的非白色区域转为灰色,这就是你看到下拉通知栏后图标变灰的原因。而状态栏的小图标可能因launcher兼容问题暂时显示应用图标(带颜色),所以刚接收时颜色正常。

具体解决步骤

  • 准备合规的通知图标
    制作仅包含白色和透明区域的图标,尺寸覆盖不同屏幕密度:

    • mdpi: 24×24px
    • hdpi: 36×36px
    • xhdpi: 48×48px
    • xxhdpi: 72×72px
    • xxxhdpi: 96×96px
      或者用Android Studio的「Image Asset」工具生成:右键项目android/app/src/main/res目录 → New → Image Asset → 选择「Notification Icon」,导入你的单色图,工具会自动生成各密度版本。
  • 配置AndroidManifest.xml
    在android/app/src/main/AndroidManifest.xml的<application>标签内添加以下配置,指定默认通知图标:

    <!-- 指定FCM默认通知图标 -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_notification" />
    
    <!-- 可选:设置状态栏通知图标的背景色(仅影响状态栏小图标) -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/your_notification_color" />
    

    注意@drawable/ic_notification要和你放置的图标文件名一致(不带.png后缀)。

  • 自定义本地通知的图标配置(如果用到)
    如果你用flutter_local_notifications插件配合FCM显示本地通知,初始化时要指定图标:

    const AndroidInitializationSettings androidInitSettings =
        AndroidInitializationSettings('ic_notification');
    final InitializationSettings initSettings =
        InitializationSettings(android: androidInitSettings);
    
  • 验证生效
    执行flutter clean清理缓存,再重新编译运行项目,之后从Firebase控制台发送通知测试,此时状态栏和下拉通知栏的图标应该统一为你设置的单色图标,不会再变灰。

内容的提问来源于stack exchange,提问作者Muhammad Faisal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:50:04