Flutter Firebase Messaging推送通知显示白方块而非图标问题求助
图标不符合通知规范:Android通知图标要求必须是透明背景的单色(仅白色)图标,如果生成的图标带有彩色或不透明背景,系统会自动将其转为白方块。重新检查AndroidAssetStudio生成的图标,确保只保留alpha通道(透明背景+白色前景),没有额外颜色。
资源未按屏幕密度分类放置:仅将图标放在
drawable文件夹可能导致系统缩放异常。AndroidAssetStudio会生成对应不同密度的图标包(mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi),需要将对应尺寸的图标分别放到android/app/src/main/res/drawable-xxx这类密度文件夹中,而不是只放默认drawable目录。Manifest配置位置错误:
<meta-data>标签必须放在<application>标签内部,不能嵌套在<activity>或其他标签中。正确的配置结构如下:
<application android:name=".MyApplication" android:icon="@mipmap/ic_launcher" ...> <!-- 其他组件配置 --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" /> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" /> </application>
项目缓存或构建问题:旧的资源缓存可能导致新图标不生效。执行
./gradlew clean命令清理缓存,再通过Android Studio的Build -> Rebuild Project重新构建项目,之后再测试推送。推送Payload覆盖了默认图标:如果推送消息的payload中指定了
icon字段(比如Firebase控制台发送时设置了自定义图标,或者后端接口传了"icon"参数),会优先使用该图标而非Manifest中的默认配置。检查推送的payload内容,若存在该字段,要么移除它,要么确保指定的图标符合通知规范。资源引用或文件名错误:确认图标文件名是
notification_icon.png(Android资源文件名大小写敏感,注意不要拼写错误),Manifest中@drawable/notification_icon的引用不带.png后缀,且与文件名完全匹配。
内容的提问来源于stack exchange,提问作者derChris

