未使用 FCM 通知图标

Posted

技术标签:

【中文标题】未使用 FCM 通知图标【英文标题】:FCM Notification icon is not being used 【发布时间】:2016-12-31 04:09:24 【问题描述】:

我正在使用FCM,我可以成功地向我的应用发送推送通知。我想使用自定义通知图标,但它总是显示白色图标。我正在运行Lollipop

上面写着documentation

icon 可选,字符串 表示通知图标。将值设置为 可绘制资源 myicon 的 myicon。

(我不确定这到底是什么意思)。但这是我所做的。

    我从 here 生成了图标。它确实有只有白色文本和透明背景的图标。图标的示例截图图片是

    我添加到 res 文件夹

    我编辑了我的 androidManifest 并添加了这个 android:icon="@drawable/ic_stat_set" in <Application

    我尝试在设备上运行项目,新的应用图标 ic_stat_set 正在用作应用启动器。

    我从控制台发送通知,我确实收到了它,但它不是我刚刚设置的图标。

    我也尝试通过 api 发送。我确实收到了通知,但没有收到我设置的图标。

    curl -X POST --header "Authorization: key=SERVERKEY" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "\"to\":\"REGISTERATION-TOKEN-ID\",\"notification\":\"body\":\"Yellow\" , \"icon\" : \"ic_stat_set\" \"priority":\"10""

更新:我的可绘制图标文件是https://drive.google.com/open?id=0B5Fi1l7EbQ_BOERUMzNuQy1OWXM

我是否必须在控制台的这些自定义数据文件中添加一些内容?我的图标?我错过了什么?

谢谢

【问题讨论】:

loliipop 需要 silhouette 【参考方案1】:

Lollipop版本使用无背景图标png图片。

  NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this).setSmallIcon(getNotificationIcon())
            .setContentTitle(title)
            .setSound(defaultSoundUri)
            .setDefaults(Notification.DEFAULT_ALL)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
            .setContentText(message).setAutoCancel(true)
            .setContentIntent(contentIntent);
    notificationManager.notify(NOTIFICATION_ID++, builder.build());


private int getNotificationIcon() 
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.logo : R.drawable.ic_launcher;

【讨论】:

我上面提供的图标截图清楚地表明它是一个没有背景的png,不是吗? 他正在使用 FCM 和 Lollipop,没有数据字段。这段代码永远不会被执行。它是显示通知的系统。【参考方案2】:

您应该使用 剪影图标 。您必须创建图标的剪影图标(即通知图标)。白色背景问题将由此解决。 它对我有用。请试一试。

【讨论】:

你也应该研究这个链接:-> blog.clevertap.com/… 我确实有透明图标,与您提供的博客链接中提到的相同。问题还在。 :S 必须创建通知图标的剪影图标(不管你是什么)?你应该试试 。它可能会起作用。它对我有用。 drive.google.com/open?id=0B5Fi1l7EbQ_BOERUMzNuQy1OWXM 这是图标的文件。他们是剪影吗? 试试这个图标一次 ->google.co.in/….【参考方案3】:

默认情况下,棒棒糖状态栏图标颜色为白色后的android API,需要为高版本和旧版本设置图标。如果没有 hack,你可以试试这个:

  int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.your_logo_for_Kitkat : R.mipmap.your_logo_for_Lolipop_and_uper_version;
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(icon)
                .setContentTitle(remoteMessage.getData().get("title"))
                .setContentText(remoteMessage.getData().get("shortDescription"))
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setColor(Color.RED)
                .setStyle(notiStyle)
                .setContentIntent(pendingIntent);

【讨论】:

他正在使用 FCM 和 Lollipop,没有数据字段。这段代码永远不会被执行。它是显示通知的系统。 还有系统为他的通知设置图标或标志!!【参考方案4】:

我认为可能是您关闭状态栏的图标大小

看这里。

https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html

您的应用图标应该与通知图标不同。

通知中的图标参数用于状态栏。

Manifest 中的图标参数是应用程序图标(快捷方式)

我推荐这个sample

【讨论】:

drive.google.com/open?id=0B5Fi1l7EbQ_BOERUMzNuQy1OWXM 这是 res 文件夹图标文件。你怎么看? @cjmling 您需要 2 个图标,一个用于启动器,一个用于通知。它们的大小不同。修复此问题并阅读我发送给您的内容,它应该可以工作。这些更改对我来说效果很好。 感谢它现在的工作。我实际上阅读了这篇文章,但找不到问题所在。现在我刚刚从示例应用程序中复制了可绘制图标/文件夹并进行了测试。工作很棒。 :) .. 可能是图标大小或其要求存在问题,我无法弄清楚它是什么。

以上是关于未使用 FCM 通知图标的主要内容,如果未能解决你的问题,请参考以下文章

android Firebase 云消息通知图标

如何使用 FCM(Firebase 云消息传递)制作紧凑通知?

使用 xamarin 表单在前台未收到 FCM 通知

系统刚启动时未收到 FCM 通知

FCM 推送通知问题:“错误”:“未注册”

客户端未收到主题服务器端的 FCM 通知