You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:31:42