2

我有一个奇怪的问题。我有两种方法可以在我的 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());
4

2 回答 2

3

notification-messages您的问题很可能是和之间的区别data-messages

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

当您希望 FCM 代表您的客户端应用处理显示通知时,请使用通知消息。当您想要处理客户端应用程序上的消息时,请使用数据消息。

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

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

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

.

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

于 2017-07-03T06:59:56.130 回答
-1

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

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

于 2016-06-06T08:27:46.690 回答