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

Firebase推送通知图标异常:Marshmallow及以上后台显示白色

解决Firebase后台通知图标显示白色的问题

看起来你遇到的是FCM通知里一个很常见的场景——应用前台时通知图标显示正常,但后台/完全关闭状态下图标就变成白色,这背后其实是前后台通知的处理逻辑差异在搞鬼!

问题根源

当你的应用处于后台或被关闭时,FCM的notification类型消息会直接由Android系统接管展示,根本不会触发你的onMessageReceived方法,所以你在sendNotification里设置的setSmallIcon和setColor完全不会生效。只有应用在前台时,onMessageReceived才会被调用,你的自定义通知代码才能起作用。

解决方案

要搞定这个问题,你需要从系统默认配置和通知发送端两个层面入手:

  1. 在Manifest中配置默认通知图标与颜色
    给application节点添加两个meta-data标签,指定系统处理后台通知时使用的默认图标和颜色,这样系统接管通知时就会用这些配置:

    <application 
        android:name="com.xxxx" 
        android:allowTaskReparenting="true" 
        android:hardwareAccelerated="true" 
        android:icon="@drawable/ic_xxxx" 
        android:label="@string/app_name" 
        android:largeHeap="true" 
        android:theme="@style/AppTheme">
    
        <!-- FCM默认通知图标(填你那版白色透明的图标) -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/xxxxxx" />
    
        <!-- FCM默认通知颜色(对应你代码里设置的accent色) -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/accent" />
    
        <!-- 原有其他配置 -->
    </application>
    
  2. 确保图标符合Android通知规范
    你的通知图标必须是纯白色、透明背景的图片(矢量图或PNG均可),还要准备不同dpi尺寸的版本(mdpi 24x24、hdpi 36x36、xhdpi 48x48、xxhdpi 72x72、xxxhdpi 96x96),放在对应的drawable-xxx文件夹下。系统会自动给这个白色图标染上你设置的颜色,这样在通知栏里就能显示正确样式。

  3. 检查通知发送端的配置

    • 如果用Firebase控制台发通知:不要在"高级选项"里设置自定义图标(设置了会覆盖Manifest的默认配置),或者确保控制台填写的图标名称和你drawable里的资源名完全一致。
    • 如果用API发通知:在notification payload里明确指定icon和color字段:
      {
        "notification": {
          "title": "消息标题",
          "body": "消息内容",
          "icon": "xxxxxx", // 填drawable资源名,不要加@符号
          "color": "#你的颜色十六进制值"
        },
        "to": "目标设备Token"
      }
      

额外提示

如果你的通知是纯data类型(只有data字段,没有notification字段),那无论应用处于前台还是后台,都会触发onMessageReceived,这时候你的自定义通知代码就会生效。但如果是notification类型消息,后台时就由系统处理,必须依赖Manifest或payload的配置。

这样设置后,不管应用是前台还是后台/关闭状态,通知图标都能正常显示啦!

内容的提问来源于stack exchange,提问作者Pratik Vyas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:52