【问题标题】:Issue loading resources when app is not running应用未运行时加载资源问题
【发布时间】:2016-12-02 11:21:02
【问题描述】:

我发现了关于 android 通知上的小图标的类似问题,但 Google 不会就以下问题给我任何提示:

简而言之,当应用未打开时,我的通知不会显示颜色和图标,但当应用在屏幕上可见时它会完美运行。

出现通知时应用正在后台运行:

当通知出现时,应用程序在屏幕上可见:

对我来说,该服务似乎无法使用其当前上下文加载某些资源。目前我正在使用我自己的 python 服务器调用 firebase REST Api 来发送通知。

虽然标题和文本正文是通过通知自己的负载直接发送的,但图标和颜色由应用选择。

这就是在服务中构建通知的方式。

final Context context = this.getApplicationContext();

final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setDefaults(Notification.DEFAULT_SOUND)
                .setContentTitle(notification.getTitle())
                .setContentText(notification.getBody())
                .setColor(ContextCompat.getColor(context, R.color.notification))
                .setSmallIcon(R.drawable.ic_local_shipping_white_24dp);

这是最终显示通知的 sn-p:

final NotificationManagerCompat mNotificationManager = NotificationManagerCompat.from(context);
final boolean notificationsEnabled = mNotificationManager.areNotificationsEnabled();
if (notificationsEnabled) {
    mNotificationManager.notify(notifyID, mBuilder.build());
}

感谢您的帮助!

【问题讨论】:

  • 如果您使用 firebase 推送通知工具测试推送,则推送无法正常工作,因为如果您的应用在后台模式下收到通知,那么此通知将由系统管理,系统会显示您的应用图标,这就是为什么您应用没有显示正确的通知
  • @Manza 我已经尝试将它添加到清单中,但它仍然无法正常工作。因为我还想决定动态使用哪个图标,所以它可能是另一个用例。我确实经常读到它必须是透明的白色图标,我也可以为我目前使用的材料图标验证这一点。
  • @TheWhiteLlama 我链接的解决方案适用于 firebase 版本 9.8.0。或者在下面查看我的答案
  • @TheWhiteLlama 我已经更新了答案

标签: android firebase android-notifications firebase-cloud-messaging firebase-notifications


【解决方案1】:

您可以尝试:

1. 更新到 9.8.0 版本并检查THIS 解决方案

2. 发送推送通知时设置图标和颜色。

示例 JSON:

{
     "notification" : {
      "body" : "My amazing body!",
      "title" : "My amazing title",
      "icon" : "ic_logo",
      "sound" : "default",
      "color" : "#D63A49"
    },
    "registration_ids": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"]
}

ic_logo是资源名称

3. 发送data 通知。这样即使应用处于后台,onMessageReceived(RemoteMessage message) 方法也会被调用

示例 JSON:

{
    "data": {
        "my_custom_key" : "my_custom_value",
        "whatever" : "YES",
        "other_key" : true
     },
    "to": "XXXXXXX"
}

【讨论】:

  • 好的,我试试这个。一个问题仍然在我脑海中:如何设置小图标但只有资源名称?
  • 资源名称是可绘制文件夹中的一个图标 :)
  • 那么我该如何设置图标呢? :P setSmallIcon 方法只接受 int 参数
  • 你已经在做 .setSmallIcon(R.drawable.ic_local_shipping_white_24dp);
  • 啊啊啊现在可以了。你真是太棒了!那么当应用程序在后台运行时,firebase 会自行处理选择正确的图标吗?非常感谢!
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多