Android:FCM 通知显示不正确

Android: FCM notification showing up incorrectly

我正在使用 Firebase 云消息传递向特定 device-tokens 发送通知。通知以这种形式从后端发送:

notification: {
    title: "New delivery request",
    body: order.id,
    sound: "default"
}

最初,我按照来自 FCM 的确切方式显示通知,因此,通知看起来像这样,我对此很满意:


我最近将实现更改为以下代码:

override fun onMessageReceived(remoteMessage: RemoteMessage) {

        var notificationTitle: String? = null
        var notificationBody: String? = null

        if (remoteMessage.notification != null) {
            notificationTitle = remoteMessage.notification!!.title
            notificationBody = remoteMessage.notification!!.body
        }

        val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

        val intent = Intent(this, HomeActivity::class.java)
        intent.putExtra("ORDER", notificationBody)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

        val pendingIntent = PendingIntent.getActivity(
            this,
            1234,
            intent,
            PendingIntent.FLAG_ONE_SHOT
        )

        val notificationBuilder =
            NotificationCompat.Builder(this, "REM")
                .setContentTitle(notificationTitle)
                .setContentText("Click to accept")
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setStyle(NotificationCompat.BigTextStyle())
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent)
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
                .setAutoCancel(true)

        val notificationManager =
            ContextCompat.getSystemService(this, NotificationManager::class.java) as NotificationManager


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(
                "REM",
                "pushNotifications",
                NotificationManager.IMPORTANCE_DEFAULT
            )
            notificationManager.createNotificationChannel(channel)
        }

        notificationManager.notify(1234, notificationBuilder.build())

    }

从上面的代码片段中,我现在希望看到的是一个通知,其中 content-title 设置为 notificationTitle,content-text 设置为“Click to accept”。但是,它仍然显示与上图相同的方式。我不知道为什么它没有改变。我有:

非常感谢您对此问题的澄清。我该怎么做才能让通知以我想要的方式显示?

代码设置正确。

理想情况下,这应该显示 点击接受 作为通知的 content-text之所以没有发生这种情况,是因为后端的结构方式。

这里有两个需要注意的要点:

  • 当您向 FCM 发送 notification 负载时,这基本上意味着通知将直接显示在应用程序上,而无需通过 onMessageReceived()。这正是这种情况下发生的情况。

  • 当您发送 data 负载时,通知会通过您应用的 onMessageReceived() 拦截,您可以在此处修改您希望显示通知的方式。

因此,快速解决此问题的方法是在后端将 notification 更改为 data 并重新部署。之后一切都应该正常工作。查看下面的代码片段:

data: {
    title: "New delivery request",
    body: order.id,
    sound: "default"
}

有关 FCM 负载类型的更多信息,请查看 this link