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
相关产品推荐
相关产品推荐

