使用Firebase通知时灰色方形作为通知图标

21
我正在尝试将Firebase Cloud Messaging集成到我的Android应用程序中。但是当应用程序在后台或关闭时,Firebase通知会显示灰色方形图标,而不是我的应用程序启动器图标。
如何使通知图标成为我的应用程序标志,而不实现Firebase服务器API并发送数据消息?

通知图标来源于您的启动器图标。请参见https://dev59.com/AloU5IYBdhLWcg3wk3l2 - Frank van Puffelen
一个简单的解决方法是:https://dev59.com/bVsX5IYBdhLWcg3wHcXA#45280972 - Adam
6个回答

29

4
我尝试过了,但仍然无法使用。(我的手机是Moto G4+,系统版本为Nougat) 应用程序被关闭/不在前台。 - hardik9850
1
确实……我没有针对Firebase 9.8.0进行定位。将库版本更新为9.8.0并使用元数据字段可以纠正此问题。 - dell116
执行任务':app:processDebugResources'失败。
执行com.android.build.gradle.internal.tasks.Workers$ActionFacade时发生故障 Android资源链接失败 D:\john\appname\android\app\src\main\AndroidManifest.xml:27:13-29:72: AAPT:错误:找不到资源drawable/ic_stat_ic_notification(又名com.example.appname:drawable/ic_stat_ic_notification)。
D:\john\appname\android\app\src\main\AndroidManifest.xml:30:13-32:57: AAPT:错误:找不到资源color/colorAccent(又名com.example.appname:color/colorAccent)。
- Kamlesh

9
这与Firebase无关。从Android 3.0开始,状态栏图标进行了修订,"仅由透明背景上的白色像素组成,适当使用α混合来获得光滑的边缘和内部纹理"。https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html。据我所见,从Android 5.0开始,你必须提供这些全白的小状态图标,否则灰色方形图标会显示出来。
此问题(图标未在通知中显示:显示白色方块)有进一步解释的答案,并展示如何强制应用程序使用原始ic_launcher图标,尽管这对我来说似乎不是一个好主意,因为你被迫针对旧版本的sdk并且没有遵循材料设计准则。
你真正需要做的是提供小白色图标,可以在此处生成:http://romannurik.github.io/AndroidAssetStudio/icons-notification.html 并将它们添加到你的项目中,然后按照接受的答案中的说明配置FCM来使用它们。
<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

7

这是firebase的一个bug。如果您的应用在前台运行,并且通知是从Firebase控制台发送的,则会收到灰色图标。

解决方法是:通过API发送通知,而不是从控制台发送。


3
我在Flutter中使用以下解决方案,它对我有效:
  1. 创建一个透明和白色的通知图标(您可以使用以下工具: AndroidAssetStudio

  2. 下载zip文件夹,解压缩后,您会看到其中包含不同drawable文件夹的res文件夹。将res文件夹的内容复制并粘贴到“android\app\src\main\res”路径中

enter image description here

  1. 然后打开AndroidManifest.xml文件,并添加以下行:

ic_stat_calendar_today是我的通知图标的名称。并且每个已粘贴的drawable文件夹都包含具有相同名称的不同大小的图标。

enter image description here

如果您想更改图标的颜色,请查看上面的图片。在通知图标标签后添加元数据标签。 前往"android\app\src\main\res\values"并添加一个colors.xml文件。

enter image description here

Stackoverflow不允许我在此处添加colors.xml文件代码,因此我只是在上面的图像中添加了代码,您需要手动在colors.xml中输入它。对此我很抱歉。
特别感谢Github上的“RumanaB”。

嘿@Kamlesh,你知道我怎样才能在OneSignal中实现这个吗? - Oliver D
不好意思,我没有使用过OneSignal。谢谢。 - Kamlesh
@Kamlesh,你的解决方案对我非常有效。但是我的图标有多种颜色,这里我们只传递了一种颜色,我们如何传递多种颜色来显示图标呢? - Ram

2
在一个透明背景的25x25像素的图像内创建基本形状。注意安全框,并保持上下2个像素的空白。将图标以25x25的大小导出为启用了透明度的PNG文件。

透明背景,适用于我 - Rohmatul Laily

1

对我有用的是:

  • 遵循上述关于创建通知图标的所有步骤
  • 将它们放在drawable文件夹中的src/main/res/目录下
  • 在/values中创建colors.xml
  • 在AndroidManifest中添加值

我还需要做的一个额外步骤是在服务器端的fcm/send post请求中定义:

"notification": {
        "title": "your title",
        "body": "your body",
        "icon": "your icon name in drawable folder"
    },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接