Android 通知图标问题

Android notification icon issue

我有一个奇怪的问题。我有两种方法可以在我的 Android 应用程序中发送通知;一个来自 Android 服务,另一个来自 FCM。

场景如下:

  1. 无论应用程序是否运行,从Android服务发送的通知图标都会正确显示。
  2. 当应用程序 运行 时,如果我通过 FCM 发送通知,通知图标仍然显示正确。
  3. 但如果该应用不是 运行 并且我通过 FCM 发送通知,则会显示一个白色方块而不是通知图标。

我在 FCMService 中的代码:

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.notification_icon)
                .setContentTitle("Android App")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());

这是 github fcm 页面中详细介绍的 FMC 错误。

https://github.com/firebase/quickstart-android/issues/4

您的问题很可能是 notification-messagesdata-messages 之间的差异。

请阅读:https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

Use notification messages when you want FCM to handle displaying a notification on your client app's behalf. Use data messages when you want to process the messages on your client app.

目前 FCM Web 控制台仅发送 通知消息

因此,所有通过 Web 控制台(或通过 API 使用 notification 负载)发送的消息都将以这种方式发送:

  1. 如果应用程序已关闭或处于后台:FCM 将显示通知。如果你想定制它你可以,但你需要提供特定的配置(在清单中或在发送 API 调用中)见 https://firebase.google.com/docs/cloud-messaging/android/client#manifest
  2. 如果应用程序在前台:FCM 将调用onMessageReceived()

.

如果您想要的行为是 onMessageReceived() 总是被调用:
那么你需要使用 data-only (no notification) message