用Python实现FCM多行可展开推送通知可行吗?如何实现?
实现FCM可展开多行通知方案
FCM的Notification类型消息无法直接实现你想要的可展开效果——这类消息由FCM服务直接推送给系统通知栏,样式受系统默认规则限制,仅靠body里的换行符只能显示固定行数,不会自动提供展开选项。
要实现类似WhatsApp/Gmail的可展开通知,必须改用数据消息(Data Message),让客户端APP自行处理通知的构建逻辑,从而完全自定义通知样式,包括展开功能。
一、发送端Python代码调整
不再使用notification字段,改用data字段传递通知内容:
message = messaging.MulticastMessage( data={ "title": "Title", "body": "body line1\nbody line2\nbody line3\nbody line4\nbody line5\nbody line6" }, tokens=['eg-token1','eg-token2','eg-token3',...,'eg-tokenN'] ) messaging.send_multicast(message)
二、客户端(以Android为例)处理逻辑
客户端接收到数据消息后,手动创建带有BigTextStyle的通知,实现展开效果:
// 在FirebaseMessagingService的onMessageReceived方法中处理 override fun onMessageReceived(remoteMessage: RemoteMessage) { val title = remoteMessage.data["title"] ?: "" val body = remoteMessage.data["body"] ?: "" // 创建可展开的BigTextStyle val bigTextStyle = NotificationCompat.BigTextStyle() .bigText(body) .setBigContentTitle(title) // 构建通知:折叠时显示前2行,展开后显示全部内容 val notification = NotificationCompat.Builder(this, "CHANNEL_ID") .setSmallIcon(R.drawable.ic_notification) .setContentTitle(title) .setContentText(body.split("\n").take(2).joinToString("\n")) .setStyle(bigTextStyle) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .build() // 显示通知 NotificationManagerCompat.from(this).notify(1, notification) }
补充说明
- 数据消息不会自动在通知栏显示,必须由客户端APP自行处理展示逻辑,这意味着你可以完全控制通知的样式、交互和展开行为。
- iOS端的处理逻辑类似,需要在
didReceiveRemoteNotification方法中接收数据,通过UNNotificationContent等API构建可展开通知。
内容的提问来源于stack exchange,提问作者Mahendra
相关产品推荐
相关产品推荐

