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

Flutter推送通知图标显示异常:白框问题求助

问题解决:Flutter应用图标正常但通知图标显示白框

flutter_launcher_icon包仅负责配置应用启动图标,系统推送通知的图标有独立的规范要求,尤其是Android平台对图标格式的限制,是导致白框问题的核心原因。以下是分平台的具体解决步骤:


Android 端修复步骤

  1. 准备合规的通知图标
    必须使用透明背景的单色(白色)图标,按Android分辨率规范准备多尺寸版本:

    • mdpi: 24x24px
    • hdpi: 36x36px
    • xhdpi: 48x48px
    • xxhdpi: 72x72px
    • xxxhdpi: 96x96px
      建议用矢量图导出各尺寸PNG,避免模糊。
  2. 放置图标到资源目录
    在android/app/src/main/res/下创建(若不存在)drawable-mdpi、drawable-hdpi等目录,将对应尺寸的图标命名为ic_notification.png(可自定义名称),放入对应分辨率目录。

  3. 配置AndroidManifest.xml
    打开android/app/src/main/AndroidManifest.xml,在<application>标签内添加默认通知图标配置:

    <!-- 设置默认通知图标 -->
    <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" />
    

    若使用原生通知而非Firebase,需在创建NotificationChannel时指定图标:

    val channel = NotificationChannel(CHANNEL_ID, "通知渠道名", NotificationManager.IMPORTANCE_DEFAULT).apply {
        setSmallIcon(R.drawable.ic_notification)
        // 其他渠道配置
    }
    

iOS 端修复步骤

  1. 准备通知图标
    要求为透明背景的PNG,需覆盖以下尺寸:
    20x20、29x29、40x40、58x58、80x80、87x87、100x100、120x120、152x152、167x167、180x180px

  2. 添加到Assets资源库
    打开iOS项目的Assets.xcassets,右键新建Image Set并命名(如NotificationIcon),将对应尺寸的图标拖入1x、2x、3x的位置。

  3. 配置项目与推送参数

    • 在Xcode中进入Target → General → App Icons and Launch Images,在Notification Icons下拉选择刚才创建的Image Set。
    • 若使用第三方推送服务(如Firebase),确保推送payload未错误覆盖图标设置,优先使用本地配置的默认图标。

通用注意事项

  • 禁止使用带彩色或不透明背景的图标作为通知图标,Android系统会自动将非透明区域转为白色,导致白框。
  • 配置完成后执行flutter clean && flutter build apk/ios,确保资源被正确打包。
  • 若推送服务端payload中指定了图标参数,需确保参数名称与本地资源名称一致。

内容的提问来源于stack exchange,提问作者Akhil George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:56