Cordova Android中的推送通知图标

13

我正在使用Phonegap Push Plugin,当推送通知显示在通知区域时,图标只是一个白色正方形。我想要它显示star.png。 我尝试按照文档进行如下操作:

我将star.png放置在www/images中,并在config.xml中添加了以下行:

<platform name="android">
  <resource-file src="www/images/star.png" target="res/drawable-xhdpi/star.png" />
  <resource-file src="www/images/star.png" target="res/drawable-hdpi/star.png" />
  <resource-file src="www/images/star.png" target="res/drawable-mdpi/star.png" />
  <resource-file src="www/images/star.png" target="res/drawable-ldpi/star.png" />
</platform>
我知道我应该使用不同的分辨率,但现在我只是想让它工作。
然后当我初始化插件时,我使用:
let push = PushNotification.init({
    android: { senderID: globalData.firebaseSenderID, icon: 'star.png', iconColor: 'blue' },
    ios: {}
});

我也尝试了icon: 'star'。然而,白色正方形仍然存在。我该如何使其生效?

使用cordova@8.0.0和cordova-android@6.4.0。


@JamesWong 我该如何验证这个? - wezten
@JamesWong 我已经解决了,通过将apk文件作为zip文件进行检查。star.png在那里。 - wezten
@wezten 你有没有看过这个 - “自从5.0(棒棒糖)以来,Android现在大量使用Material设计,推送通知图标被强制为单色 - 这可能很难诊断,因为许多图标如果设计不当就只会显示为白色方块。” 我的感觉是,也许star.png没有按照https://www.google.com/design/spec/style/icons.html#的要求设计,导致只显示一个白色方块。 - Gandhi
@Gandhi 是的,我的星星是白色透明的。我使用这个星星创建了一个纯Android项目,并使用推送通知,一切都很好。 - wezten
1
你找到解决办法了吗?如果找到了,请标记正确的解决方案,因为我也遇到了同样的问题。 - Delmontee
显示剩余2条评论
3个回答

5
我遇到了与此插件和默认通知图标(白色方块)相同的问题。在init()函数中,icon属性似乎只适用于GCM(插件版本1.x)。我找到了一种解决方案,可以在推送负载中设置图标(从服务器发送)。不幸的是,由于这不是我们应用程序中的服务,因此我无法更改负载。

但幸运的是,Firebase也具有自己的推送图标设置(默认为白色方块图标),它可以用AndroidManifest.xml中的元数据标签进行替换。

解决办法

尝试通过在位于platforms / android / app / src / main /位置的AndroidManifest.xml文件中添加以下metadata标签来解决此问题:

<application>
    <!-- ... -->
    <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/star"/>
    <!-- ... -->
</application>

自动化 - 钩子

运行您的Android应用程序并检查是否出现了您期望的图标。如果成功,您现在可以像我们一样通过Cordova钩子来扩展您的项目。例如,以下OSX bash脚本始终将上面的行添加到AndroidManifest中:

sed -i '' "s|</application>|<meta-data android:name=\"com.google.firebase.messaging.default_notification_icon\" android:resource=\"@drawable/star\"/></application>|1" platforms/android/app/src/main/AndroidManifest.xml

你好,我喜欢你的 Automation-hook 修复。那么问题来了:我们需要在下一行加上 </application> 吗?否则可能会破坏 XML 的语义结构。 - Ritesh Aryal

2
对于Cordova 8,我已经将我的config.xml文件设置如下: "最初的回答"
<resource-file src="resources/android/notification/icon-mdpi.png" target="app/src/main/res/drawable-mdpi/notification.png" />
<resource-file src="resources/android/notification/icon-hdpi.png" target="app/src/main/res/drawable-hdpi/notification.png" />
<resource-file src="resources/android/notification/icon-xhdpi.png" target="app/src/main/res/drawable-xhdpi/notification.png" />
<resource-file src="resources/android/notification/icon-xxhdpi.png" target="app/src/main/res/drawable-xxhdpi/notification.png" />
<resource-file src="resources/android/notification/icon-xxxhdpi.png" target="app/src/main/res/drawable-xxxhdpi/notification.png" />

接着,我把图标放在 resources/android/notification/ 文件夹中,并按以下分辨率命名:

resources/android/notification/icon-mdpi.png     (24 × 24)
resources/android/notification/icon-hdpi.png     (36 × 36)
resources/android/notification/icon-xhdpi.png    (48 × 48)
resources/android/notification/icon-xxhdpi.png   (72 × 72)
resources/android/notification/icon-xxxhdpi.png  (96 × 96)

之后只需要将通知调度作为属性使用:
smallIcon: 'res://notification',

0

如果您阅读文档中的部分内容

其中icon是Android res/drawable文件夹中一个.png图像文件的名称。例如:platforms/android/res/drawable/phonegap.png编写钩子来描述如何将图像复制到Android res/drawable文件夹超出了此自述文件的范围,但有一篇优秀的教程可以供您参考。`. 您可以查看此文章以获取更多详细信息http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/

它明确表示您需要在drawable文件夹中,而您没有。


我有 - 我在问题中展示的 resource-file 元素应该将图像复制到那里。请参见 https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#resource-file。 - wezten
我认为这意味着它必须在相关的drawable文件夹中,取决于分辨率。无论如何,我也将其添加到了/drawable中,但没有帮助。 - wezten

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