tencent cloud

文档反馈

最后更新时间:2024-01-31 15:54:17

    功能描述

    通过 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;
    }
    }
    }
    }
    }
    })

    视频消息

    接收方收到视频消息后,一般需要在聊天界面显示一个视频预览图,当用户点击消息后,才会触发视频的播放。 所以这里需要两步:
    IM 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;
    }
    }
    }
    })

    语音消息

    IM 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_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;
    }
    }
    }
    })

    文件消息

    IM 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) {
    // 有下一个消息
    }
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持