You need to enable JavaScript to run this app.
导航

会话相关

最近更新时间2023.09.25 19:45:01

首次发布时间2023.04.24 11:11:47

本文档提供会话相关的类型和接口使用说明。用户可以创建一个单聊或群聊,并使用会话管理 API 实现会话列表展示/更新、会话未读数更新、置顶会话、会话草稿、会话免打扰等功能。API 接口详细文档参看 Android API 参考iOS API 参考Web API 参考微信小程序 API 参考

会话类型

BIMConversation 为 IMSDK 的会话内容承载类,在使用 IMSDK 的过程中会频繁的使用该类。

会话列表

获取会话列表

分页拉取步骤:

  1. 首次调用时将参数 cursor 设置为0,指定 count 为 50(表示一次拉取 50 个会话对象)。

  2. 首次拉取成功后,其中的 hasMore 表示是否还有下一页(ture 表示还有下一页,false 表示已经拉取完成)。

  3. 用户继续向上拉取会话列表时,如果还有更多数据,可以继续调用 getConversationList 接口,cursor 传递上一页返回 BIMConversationListResult 中的 nextCursor, 如首次拉取则 cursor 传参为 -1。

  4. 重复步骤 3 直至 hasMore 为 false。

BIMClient.getInstance().getConversationList(cursor, 50, new BIMResultCallback<BIMConversationListResult>() {
    @Override
    public void onSuccess(BIMConversationListResult bimConversationListResult) {
       
    }

    @Override
    public void onFailed(int code, String msg) {
    }
});

会话列表更新

IM SDK 会在登录成功后、用户上线后、断线重连后,自动触发会话列表更新。 为获取会话列表的更新,你需要进行如下几步操作:

  1. 添加会话监听器,接收会话变更通知并处理。可以在 BIMConversationListListener 协议中获取变更的通知。
BIMClient.getInstance().addConversationListener(new BIMConversationListListener() {
    @Override
    public void onNewConversation(List<BIMConversation> list) {
        //产生新会话回调
    }

    @Override
    public void onConversationChanged(List<BIMConversation> list) {
        //会话发生变化回调
    }

    @Override
    public void onConversationDelete(List<BIMConversation> list) {
        //会话删除回调
    }

    @Override
    public void onTotalUnreadMessageCountChanged(int i) {
        //会话总未读数变化回调
    }
});
  1. 移除会话监听器,可按照业务逻辑按需调用,与 addConversationListener 对应使用。
BIMClient.getInstance().removeConversationListener(conversationListener);

获取会话

IM SDK 提供获取会话的接口,可以获取指定的单个 BIMConversation 对象信息。

BIMClient.getInstance().getConversation(conversationId, new BIMResultCallback<BIMConversation>() {
    @Override
    public void onSuccess(BIMConversation bimConversation) {
        
    }

    @Override
    public void onFailed(BIMErrorCode bimErrorCode) {

    }
});

会话未读数

用户的会话列表中一般会有多个会话,如果某个会话收到了新消息,通常需要在列表的 cell 中以小红点或者数字角标的方式,向用户展示该会话的未读消息数,提醒用户阅读。

总未读数

  1. 获取总未读数。
BIMClient.getInstance().getTotalUnreadMessageCount(new BIMResultCallback<BIMUnReadInfo>() {
    @Override
    public void onSuccess(BIMUnReadInfo bimUnReadInfo) {
    }

    @Override
    public void onFailed(BIMErrorCode bimErrorCode) {

    }
});
  1. 设置未读数监听,当会话的未读总数发生变更时,SDK 还会主动通过回调 onTotalUnreadMessageCountChanged,将最新的未读总数通知出来。
BIMClient.getInstance().addConversationListener(new BIMConversationListListener() {
    //...其他回调
    @Override
    public void onTotalUnreadMessageCountChanged(int i) {

    }
});

会话未读数

  1. 获取单个会话的未读消息总数,可以通过 BIMConversation 类中的 getUnReadCount 方法获取
/**
 * @type api
 * @brief 获取会话未读数
 * @return 会话未读数
 */
public long getUnReadCount()
  1. 设置单个会话的未读总数变更通知
BIMClient.getInstance().addConversationListener(new BIMConversationListListener() {

    @Override
    public void onConversationChanged(List<BIMConversation> list) {
        //未读数发生变化时回调
    }

});

清空会话未读消息数

用户点击进入会话后,需要清除未读消息数, 清除后,会话列表的小红点或数字角标需要随之消失。

BIMClient.getInstance().markConversationRead(conversationId, new BIMSimpleCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailed(BIMErrorCode bimErrorCode) {

    }
});

置顶会话

会话置顶指的是把单聊或者群聊会话固定在会话列表的最顶部,不会被其他会话更新挤到底部,方便用户查找。置顶状态会存储在服务器,切换终端设备后,置顶状态会同步到新设备上。

BIMClient.getInstance().stickTopConversation(conversationId, true, new BIMSimpleCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailed(BIMErrorCode bimErrorCode) {

    }
});

删除会话

删除好友或退出群组后,SDK 不会自动删除对应的单聊或群聊会话。客户可以调用下面的接口,主动删除会话。

BIMClient.getInstance().deleteConversation(conversationId, new BIMSimpleCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailed(BIMErrorCode bimErrorCode) {

    }
});

会话草稿

在发送消息时,可能会遇到消息尚未编辑完,就要切换至其它聊天窗口的情况。这些未编辑完的消息可通过 setConversationDraft: 接口保存,以便于下次回到这个聊天界面时,通过 BIMConversation 对象的 draftText 字段,获取到尚未编辑完的内容,继续编辑。

注意:

  • 会话草稿仅支持文本内容。
  • 会话草稿仅在本地保存,不会存储到服务器,因此不能多端同步,程序卸载重装会失效。

如传递的 draftText 参数为空,表示清除草稿。

BIMClient.getInstance().setConversationDraft(draft,conversationId);