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。
我正在使用 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。