tencent cloud

即时通信 IM

动态与公告
产品动态
公告
产品简介
产品概述
基本概念
应用场景
功能介绍
账号系统
用户资料与关系链
消息管理
群组相关
公众号系统
音视频通话 Call
使用限制
购买指南
计费概述
价格说明
购买指引
续费指引
停服说明
退费说明
开发指引
Demo 专区
开通服务
体验 Demo
快速跑通
下载中心
SDK & Demo 源码
更新日志
聊天互动(含 UI)
TUIKit 组件介绍
快速开始
全功能接入
单功能接入
AI 集成
构建基础界面
更多特性
定义外观
国际化界面语言
推送服务(Push)
服务概述
名词解释
开通服务
快速跑通
厂商通道
数据统计
排查工具
客户端 API
服务端 API
推送回调
高级功能
更新日志
错误码
常见问题
智能客服
功能概述
快速入门
集成指引
管理员操作手册
客服操作手册
更多实践
直播间搭建
AI 聊天机器人方案
超大娱乐协作社群
Discord 实现指南
游戏内集成 Chat 指南
类 WhatsApp Channel 搭建方案
发送红包
Chat 应对防火墙限制相关
无 UI 集成
快速开始
集成 SDK
初始化
登录登出
消息相关
会话相关
群组相关
社群话题
用户管理
离线推送
云端搜索
本地搜索
公众号
客户端 API
JavaScript
Android
iOS & macOS
Swift
Flutter
Electron
Unity
React Native
C 接口
C++
服务端 API
生成 UserSig
REST API
第三方回调
控制台指南
新版控制台介绍
创建并升级应用
基本配置
功能配置
账号管理
群组管理
公众号管理
回调配置
用量统计
资源包查看指南
实时监控
开发辅助工具
访问管理
高级功能
常见问题
uni-app 常见问题
购买相关问题
SDK 相关问题
账号鉴权相关问题
用户资料与关系链相关问题
消息相关问题
群组相关问题
直播群相关问题
昵称头像相关问题
协议与认证
服务等级协议
安全合规认证
IM 政策
隐私政策
数据隐私和安全协议
平滑迁移方案
平滑迁移完整版
平滑迁移简化版
错误码
联系我们

Unity

PDF
聚焦模式
字号
最后更新时间: 2025-03-24 11:02:21

功能描述

通过 RecvNewMsgCallback 监听接收所有类型消息(文本、自定义、富媒体消息)。

设置消息监听器

添加监听器

接收方调用 AddRecvNewMsgCallback (Details) 添加消息监听器。一般建议在比较靠前的时间点调用,例如例如聊天消息界面初始化后,确保 App 能及时收到消息。

移除监听器

如果想停止接收消息,接收方可调用 RemoveRecvNewMsgCallback (Details) 移除消息监听器。

接收文本消息

接收方使用消息监听器接收单聊、群聊文本消息,需要以下几步:
1. 调用 AddRecvNewMsgCallback 设置事件监听器。
2. 监听 RecvNewMsgCallback 回调,在其中接收文本消息。
3. 希望停止接收消息,调用 RemoveRecvNewMsgCallback 移除监听。该步骤不是必须的,客户可以按照业务需求调用。
代码示例如下:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Text)
{
string text = elem.text_elem_content;
}
}
}
})

接收自定义消息

接收方使用消息监听器接收单聊、群聊自定义消息,需要以下几步:
1. 调用 AddRecvNewMsgCallback 设置事件监听器。
2. 监听 RecvNewMsgCallback 回调,在其中接收自定义消息。
3. 希望停止接收消息,调用 RemoveRecvNewMsgCallback 移除监听。该步骤不是必须的,客户可以按照业务需求调用。
代码示例如下:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Custom)
{
string data = elem.custom_elem_data;
string desc = elem.custom_elem_desc;
string ext = elem.custom_elem_ext;
}
}
}
})

接收富媒体消息

接收方使用消息监听器接收单聊、群聊自定义消息,需要以下几步:
1. 调用 AddRecvNewMsgCallback 设置事件监听器。
2. 监听 RecvNewMsgCallback 回调,在其中接收自定义消息。
3. 接收方解析 Message 消息中的 elem_type 属性,并根据其类型进行二次解析,获取消息内部 Elem 中的具体内容。
4. 希望停止接收消息,调用 RemoveRecvNewMsgCallback 移除监听。该步骤不是必须的,客户可以按照业务需求调用。

图片消息

一个图片消息会包含三种格式大小的图片,分别为原图、大图、微缩图(SDK 会在发送图片消息的时候自动生成微缩图、大图,客户不需要关心) 大图:是将原图等比压缩。压缩后宽、高中较小的一个等于 720 像素。 缩略图:是将原图等比压缩。压缩后宽、高中较小的一个等于 198 像素。
代码示例如下:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Image)
{
string path = elem.image_elem_orig_path; // 图片上传时的路径,消息发送者才会有这个字段,消息发送者可用这个字段将图片预先上屏,优化上屏体验。
switch(elem.image_elem_level)
{
case TIMImageLevel.kTIMImageLevel_Orig: // 原图发送
{
string id = elem.image_elem_orig_id;
int h = elem.image_elem_orig_pic_height;
int w = elem.image_elem_orig_pic_width;
int size = elem.image_elem_orig_pic_size;
string url = elem.image_elem_orig_url;
break;
}
case TIMImageLevel.kTIMImageLevel_HD: // 高清图发送(图片较大)
{
string id = elem.image_elem_large_id;
int h = elem.image_elem_large_pic_height;
int w = elem.image_elem_large_pic_width;
int size = elem.image_elem_large_pic_size;
string url = elem.image_elem_large_url;
break;
}
case TIMImageLevel.kTIMImageLevel_Compression: // 高压缩率图发送(图片较小,默认值)
{
string id = elem.image_elem_thumb_id;
int h = elem.image_elem_orig_thumb_height;
int w = elem.image_elem_orig_thumb_width;
int size = elem.image_elem_orig_thumb_size;
string url = elem.image_elem_thumb_url;
break;
}
}
}
}
}
})

视频消息

接收方收到视频消息后,一般需要在聊天界面显示一个视频预览图,当用户点击消息后,才会触发视频的播放。 所以这里需要两步:
Chat SDK 会在空闲时间将视频消息下载到 App 本地,开发者可直接使用即可,本地视频和视频封面在 App 卸载时清除。
示例代码向您演示如何从 Message 中解析出视频消息内容:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Video)
{
// 解析视频消息属性,封面、播放地址、宽高、大小等。
string type = elem.video_elem_video_type;
int size = elem.video_elem_video_size;
int duration = elem.video_elem_video_duration;
string path = elem.video_elem_video_path;
string url = elem.video_elem_video_url;
int imageType = elem.video_elem_image_type;
int imageSize = elem.video_elem_image_size;
int w = elem.video_elem_image_width;
int h = elem.video_elem_image_height;
string imagePath = elem.video_elem_image_path;
string url = elem.video_elem_image_url;
}
}
}
})

语音消息

ChatSDK 会在空闲时间将语音消息下载到 App 本地,开发者可直接使用即可,本地语音消息在APP卸载时清除
示例代码向您演示如何从 Message 中解析出语音消息内容:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Sound)
{
// 解析语音消息 播放地址,本地地址,大小,时长等。
int size = elem.sound_elem_file_size;
int duration = elem.sound_elem_file_time;
string path = elem.sound_elem_file_path;
string url = elem.sound_elem_url;
}
}
}
})

文件消息

Chat SDK 会在空闲时间将语音消息下载到 App 本地,开发者可直接使用即可,本地文件消息在APP卸载时清除
示例代码向您演示如何从 Message 中解析出文件消息内容:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_File)
{
// 解析文件消息 文件名、文件大小、url等。
int size = elem.file_elem_file_size;
string path = elem.file_elem_file_path;
string name = elem.file_elem_file_name;
string url = elem.file_elem_url;
}
}
}
})

地理位置消息

示例代码向您演示如何从 Message 中解析出地理位置消息内容:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Location)
{
// 解析地理位置消息,经纬度、描述等。
double longitude = elem.location_elem_longitude;
double latitude = elem.location_elem_latitude;
string desc = elem.location_elem_desc;
}
}
}
})

表情消息

SDK 仅为表情消息提供消息透传的通道,其中 indexdata 的内容由客户自定义。
例如发送方可设置 index = 1, data = "x12345",表示 “微笑“ 表情。 接收方收到表情消息后解析出 1 和 "x12345",按照预设的规则将其展示为 “微笑“ 表情。
示例代码向您演示如何从 Message 中解析出表情消息内容:
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 有下一个消息
if (elem.elem_type == TIMElemType.kTIMElem_Face)
{
string data = elem.face_elem_buf;
int index = elem.face_elem_index;
}
}
}
})

群 tips 消息

群 tips 消息表示群组中,除了普通消息以外,用户会接收到的提示类消息。例如 “管理员将 alice 移除群聊” “bob 修改了群名称为 xxxx” 等。
说明:
群 tips 消息只有群聊成员会收到,单聊成员收不到。
群 tips 消息有多种类型,参考 GroupTipsElem (Details) 的定义。
接收方接受到群 tips 消息后,一般需要做:
1. 解析出 GroupTipsElem 中的各个字段
2. 根据 group_tips_elem_tip_type 判断这个 tips 消息是什么类型
3. 根据类型,结合其他的字段,组装要显示的内容。
举个例子: 接收方解析出 type = kTIMGroupTip_GroupInfoChange,表示这是个群资料变更通知。 接收方可以从 group_tips_elem_op_user_info 中获取到操作者信息,再从 group_tips_elem_group_change_info_array 获取到修改后的群名称。 此时,接收方可以将 “操作者” 和 “修改后的群名称” 组装起来,构造出一条群提示。例如 “alice 修改了群名称为 group123”。
示例代码向您演示如何从 V2TIMMessage 中解析出群 tips 消息内容:
if(tip.group_tips_elem_tip_type == TIMGroupTipType.kTIMGroupTip_GroupInfoChange){
tip.group_tips_elem_group_id; // 所属群组
message.group_tips_elem_tip_type; // 群Tips类型
message.group_tips_elem_op_user_info; // 操作人资料
message.group_tips_elem_changed_user_info_array; // 被操作人资料
message.group_tips_elem_group_change_info_array; // 群信息变更详情
message.group_tips_elem_member_change_info_array; // 群成员变更信息
}

消息发送进度获取

TencentIMSDK.SetMsgElemUploadProgressCallback((Message message, int index, int cur_size, int total_size, string user_data)=>{
// message 当前正在发送的消息实例
// index 当前正在上传的文件序号
// cur_size 当前正在上传的文件大小MB
// total_size 当前正在上传的文件总大小
})

接收多个 Elem 的消息

1. 通过 Message 对象正常解析出 message_elem_array 集合。
2. 通过遍历 message_elem_array 集合获取所有 Elem。
示例代码如下:
foreach (Elem elem in message.message_elem_array) {
// 有下一个消息
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈