Windows/macOS

获取频道最后一条消息

更新时间: 2024/03/12 10:33:10

网易云信 IM 的圈组模块支持在频道列表显示当前各频道的最后一条消息,且开发者可通过在应用上层自行开发相关业务逻辑,实现频道列表动态更新各频道的最后一条消息。

频道列表显示最后一条消息的简易 UI 示例如下:

频道最后一条消息UI示例.png

接口介绍

网易云信 NIM SDK 的Message类提供GetLastMessages方法,用于获取多个频道的最后一条消息的初始数据。

该方法的响应QChatGetLastMessagesResp返回的结果为 map, key 值对应每一个channel_id,value 值是消息体QChatMessage

前提条件

已登录圈组,并已创建圈组服务器和频道。

实现方法

实现流程

  1. 获取频道最后一条消息的初始数据。

    1. 调用GetChannelsByPage拉取频道列表。
    2. 调用GetLastMessages方法获取若干个频道的最后一条消息。
    • 您需自行维护调用该方法返回的结果。
    • 被撤回的消息仍能通过调用该方法查到,但被删除的消息无法查到。如果最后一条消息是撤回消息,推荐把对应的最后一条消息置空,并给出提示表明“撤回消息”。
    1. 在您的应用内存中维护相关频道的最后一条消息。
  2. 注册消息接收回调(RegRecvCb)和消息更新回调(RegUpdatedCb),分别监听各频道的消息接收和消息更新。

  3. 参照下表,在您的应用层自行开发,实现后续频道最后一条消息在不同场景下的动态更新。

    场景
    场景说明 推荐处理方法
    回调触发更新最后一条消息 频道内,其他用户发送消息或重发消息,触发消息接收回调 更新频道最后一条消息
    频道内,其他用户撤回、更新或删除消息,触发消息更新回调 判断撤回、更新、删除的消息是否为频道最后一条消息,若非最后一条消息,则忽略;若为最后一条消息,且:
    • 为撤回或删除消息,则把最后一条消息置空
    • 为更新消息,则更新频道最后一条消息
    用户自己调用 API 后触发更新最后一条消息 自己在频道内发送、重发或更新消息 更新频道内最后一条消息
    自己在频道内撤回或删除消息 判断撤回或删除的消息是否为频道最后一条消息,若非最后一条消息,则忽略;若为最后一条消息,则把最后一条消息置空

API调用时序示例

下图以用户A、用户B 和用户C 的消息交互为例,为您展示实现频道最后一条消息动态更新的 API 调用时序,供您参考。

频道最后一条消息(PC).png

示例代码

获取初始数据

cppQChatGetLastMessagesParam param;
param.server_id = 123456;
param.channel_ids = {123456, 456789};
param.cb = [this](const QChatGetLastMessagesResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Message::GetLastMessages(param);

回调触发更新最后一条消息

cppQChatRegMsgUpdatedCbParam reg_msg_updated_cb_param;
reg_msg_updated_cb_param.cb = [this](const QChatMsgUpdatedResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Message::RegUpdatedCb(reg_msg_updated_cb_param);

用户自己调用API后触发更新最后一条消息

具体示例代码请参见圈组消息管理

此文档是否对你有帮助?
有帮助
去反馈
  • 接口介绍
  • 前提条件
  • 实现方法
  • 实现流程
  • API调用时序示例
  • 示例代码
  • 获取初始数据
  • 回调触发更新最后一条消息
  • 用户自己调用API后触发更新最后一条消息