收到两个不同的FCM通知,具体取决于应用是打开还是关闭

时间:2019-07-09 23:33:22

标签: android firebase firebase-cloud-messaging

我在FCM(Firestore云消息传递)中有这种奇怪的行为。

我正在谈论的奇怪行为是,当我向手机发送通知并且该应用当前处于打开状态时,我会收到正确样式的好消息(有封面图片)

当我发送相同的通知并且我的应用程序在后台运行时,我没有得到正确的样式(没有封面图片)

这可能是什么问题? (Android开发确实让我很难受)

这是我的代码,用于处理FCM中即将收到的通知

public class MyFirebaseInstanceService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody(), remoteMessage.getData());
    }

    private void showNotification(String title, String body, Map<String, String> data) {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "com.my.app.alarm";

        // Build cover url
        String coverURL = "";
        if (data.containsKey("cover")) {
            coverURL = "https://localhost" + data.get("cover") + ".jpg";
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Notification", NotificationManager.IMPORTANCE_DEFAULT);
            notificationChannel.setDescription("Reminder Channel");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.BLUE);
            notificationManager.createNotificationChannel(notificationChannel);
        }


        // TO open New added Games fragment
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        intent.putExtra("FragmentFromNotification", "NewAddedReleases");
        PendingIntent notificationIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        notificationBuilder.setAutoCancel(true)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(title)
                .setContentText(body)
                .setContentIntent(notificationIntent)
                .setContentInfo("Info");

        // Load new game cover here
        if (!coverURL.isEmpty()) {
            Bitmap bmp = null;
            try {
                bmp = Picasso.with(getApplicationContext()).load(coverURL).get();
                NotificationCompat.BigPictureStyle bps = new NotificationCompat.BigPictureStyle().bigPicture(bmp);
                notificationBuilder.setStyle(bps);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        notificationManager.notify(new Random().nextInt(), notificationBuilder.build());
    }

    @Override
    public void onNewToken(String s) {
        super.onNewToken(s);
    }
}

1 个答案:

答案 0 :(得分:0)

大多数消息类型均提供

onMessageReceived,但以下情况除外:

  • 当您的应用位于background中时发送的通知消息。在这种情况下,通知将传递到设备的系统托盘。用户点击通知会默认打开应用启动器。

  • background中收到的同时具有通知和数据有效负载的消息。在这种情况下,通知将传递到设备的系统托盘,数据有效载荷将在启动器活动的意图范围内传递。

简而言之,当您的应用处于后台通知状态时,将由system tray处理。

application标签内添加以下行以设置自定义默认图标和自定义颜色:

  

设置自定义默认图标。未为传入设置图标时使用   通知消息。

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

设置用于传入通知消息的颜色。在以下情况下使用   没有为传入的通知消息设置颜色。

<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

REFERENCE