Firebase 通知是灰色的

Posted

技术标签:

【中文标题】Firebase 通知是灰色的【英文标题】:Firebase Notification is grey flutter 【发布时间】:2019-06-01 01:43:04 【问题描述】:

我正在使用 Firebase 云消息传递向我的 Flutter 应用发送通知。它工作正常,但我的应用程序图标通知在 Google Pixel XL 上是灰色的。我可以看到轮廓,但由于某种原因,它仍然是灰色的。我在不同的文章中读到它与 android SDK 级别有关,但 Flutter 中的 minSdkVersion 已经是 16(小于 21)所以我不明白为什么颜色不会显示。

那么是否可以用颜色显示我的应用程序图标通知?

--提前致谢

【问题讨论】:

你说的是什么类型的图标?托盘栏上的图标或您在锁定/向下滑动屏幕上看到的通知上的图标? 您在锁定/向下滑动屏幕上看到的通知图标。 Flutter Icon 也是 bw 是的,我添加了评论。 嘿^^。你最终有彩色通知图标了吗? 【参考方案1】:

Here你可以阅读:

自定义默认通知

自定义默认图标

设置自定义默认图标允许您指定使用的图标 如果通知中未设置图标,则用于通知消息 有效载荷。也使用自定义默认图标来设置使用的图标 从 Firebase 控制台发送的通知消息。 如果没有自定义 默认图标已设置,通知有效负载中未设置图标, 使用了应用程序图标(呈现为白色)。

自定义默认颜色

您还可以定义通知使用的颜色。 不同的 android 版本以不同的方式使用此设置: Android = N 使用它为图标和应用名称着色。

试着把它放在你的AndroidManifest.xml

<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. -->
<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
<!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message.  -->
<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

您可以找到更多信息here。

您还需要定义您的colorAccent。您可以像这样在 res 文件夹中创建一个colors.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorAccent">#E91E63</color>
</resources>

在此文件夹中:/android/app/src/main/res/values

该图标也必须位于drawable 文件夹中。

但请记住,此图标必须是white,并带有透明背景

要使某些类型的icons 着色,您需要在您已经添加到您或AndroidManifest.xml 的某些设备集meta-tags 上,并且您的图标必须遵循一些规范(必须在透明背景中为白色)。您可以尝试生成一个here。试一试。记得把它放在 drawable 文件夹中并更新清单 meta-tag 图标名称。

还请阅读此SO question,以加强我在这里所说的内容。

我已经在运行 API 级别 27 的 Pixel 2 模拟器上进行了尝试:

希望对你有帮助。

【讨论】:

感谢您的回答,但我收到了 error: resource color/colorAccent (aka com.package.package:color/colorAccent) not found 错误。在哪里添加颜色资源? 我正在查看 Stack Overflow 的通知图标。它也变灰了。也许这就是它应该在较新版本的Android上的样子?不过话说回来,snapchat、FB 等都是有颜色的。 @PrinceHodonou 顺便说一句,如果您没有定义 colorAccent,您会收到该错误。如果你使用 AS。试一试。我会更新我的答案,以便您了解该怎么做。 我已经尝试过了:&lt;meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" /&gt; &lt;meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher" /&gt; 它可以编译一切,但图标仍然是灰色的。不过感谢您的帮助! @PrinceHodonou 好奇怪。不幸的是,我没有那么幸运有一个 Pixel XL 来试一试^_^。在不同的设备上,您看到的图标是真彩色还是总是 bw?请问您是否将图标设置到通知 JSON 有效负载上?到目前为止,我所有的 Flutter FCM 试验,没有在 JSON 有效负载中设置图标,在我的设备上给我一个明亮颜色的 flutter 图标。【参考方案2】:

我知道这个问题是关于 Firebase 通知的,但是因为在搜索相同的 local_notifiction 灰色图标错误时,这篇文章出现了......所以最后我能够找到解决方案(在我的情况下,图标在调试模式下工作正常,但是在构建 apk 图标时变成灰色框)

解决方案:- 在 Android/app/src/main/res 创建一个名为 raw 的新目录,并在该目录中添加一个名为 keep.xml 的文件并复制粘贴以下内容:-

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/*" />

【讨论】:

你真的让我很开心,也为我节省了一天的搜索时间。但只是出于好奇,您是如何得出这个结论的? 只是大量的搜索、命中和试验。当我找到答案时,我就会回到这个问题,这样其他人就不必面对同样的问题了。感谢@techpool 的赞赏, 为什么这不适用于 "tools:keep="@mipmap/*"" ?【参考方案3】:

我做了以下,它对我有用:

    创建一个透明的白色通知图标(可以使用以下工具:AndroidAssetStudio)

下载 zip 文件夹,解压缩,您会看到它包含一个 res 文件夹,其中包含不同的可绘制文件夹。将res文件夹的内容复制粘贴到“android\app\src\main\res”路径中

    然后打开 AndroidManifest.xml 文件并在其中添加以下行:

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

    如果您想更改图标的颜色,请查看上图。在通知图标标签后添加元数据标签

    转到“android\app\src\main\res\values”并添加一个colors.xml文件

<color name="colorAccent">#00FF00</color>

我也在以下 Github 链中分享了这个答案-Solution。

【讨论】:

【参考方案4】:

如果仅在发布时不显示图标,请将其添加到 android/app/build.gradle 部分的“buildTypes”中:

shrinkResources 错误

buildTypes 
    release 
        shrinkResources false  //  <------------

    

【讨论】:

以上是关于Firebase 通知是灰色的的主要内容,如果未能解决你的问题,请参考以下文章

如何设置由Image Base Studio生成的通知图标供Firebase使用?

android Firebase 云消息通知图标

Firebase Cloud Messaging - 更改 Android 上 Web 通知的默认 Chrome 图标

新的 Firebase 通知替换现有的未读 Firebase 通知

从 Firebase 云函数发送通知,通知为空

Firebase 函数从 Firebase DB 获取数据以进行推送通知