Flutter集成Twilio Conversation监听通知时title、body返回null
Flutter集成Twilio Conversations时FCM通知notification字段为null解决方案
问题现象
- Flutter项目接入Twilio Conversations聊天能力,已完成Android端通知配置、FCM令牌注册流程
- 监听
FirebaseMessaging.onMessage回调时,可正常读取event.data携带的全量业务数据,但event.notification.title、event.notification.body取值始终为null - 原有监听代码如下:
FirebaseMessaging.onMessage.listen(_onMessage); void _onMessage(RemoteMessage event) { Log.debug('_onMessage -> ${event.notification?.title} -> ${event.notification?.body}'); Log.debug('_onMessage -> ${event.data}'); Log.debug('_onMessage -> ${event.messageType}'); }
根本原因
Twilio Conversations默认下发的FCM推送为纯数据(data-only)类型消息,不会自动填充FCM协议中顶层的notification对象,所有通知标题、正文、会话属性等内容全部封装在data载荷中,因此直接读取event.notification下的字段必然返回null,该表现不属于配置错误,是Twilio默认推送规则导致的。
修复方案
- 直接从
data载荷解析通知内容
Twilio推送的data字段内置了固定命名的内容字段,直接读取即可拿到通知标题、正文,常用字段如下:twi_title:通知标题twi_body:通知正文conversation_sid:消息所属会话的唯一标识message_sid:消息本身的唯一标识
修改后的监听代码示例:
void _onMessage(RemoteMessage event) { // 从data字段读取通知内容,无需依赖event.notification对象 final notificationTitle = event.data['twi_title']; final notificationBody = event.data['twi_body']; final conversationId = event.data['conversation_sid']; Log.debug('_onMessage -> $notificationTitle -> $notificationBody'); Log.debug('_onMessage -> 全量data数据: ${event.data}'); } - 前台场景手动触发通知展示
纯data消息不会在App前台时自动弹出系统通知栏提醒,需要搭配本地通知插件(如flutter_local_notifications),拿到解析后的标题、正文后手动构建本地通知展示。 - 可选配置:自定义Twilio推送模板
如果需要让Twilio下发的消息自动填充FCM的notification对象,可以在Twilio控制台的Push凭证配置页自定义推送payload模板,将标题、正文字段映射到FCM notification结构下。但该方案在App前台、后台、被杀进程三种状态下的FCM回调逻辑存在差异,纯data消息的回调触发一致性更高,更推荐优先使用解析data字段的方案。
排查提示:只要
event.data可以正常拿到Twilio返回的twi_开头的字段,就说明推送链路、令牌注册、Twilio侧配置全部正常,不需要反复检查通知权限、google-services配置等项。
内容的提问来源于stack exchange,提问作者shilpa vania
相关产品推荐
相关产品推荐

