本文档提供会话相关的类型和接口使用说明。用户可以创建一个单聊或群聊,并使用会话管理 API 实现会话列表展示/更新、会话未读数更新、置顶会话、会话草稿、会话免打扰等功能。API 接口详细文档参看 Android API 参考、iOS API 参考、Web API 参考、微信小程序 API 参考。
BIMConversation 为 IMSDK 的会话内容承载类,在使用 IMSDK 的过程中会频繁的使用该类。
分页拉取步骤:
首次调用时将参数 cursor 设置为0,指定 count 为 50(表示一次拉取 50 个会话对象)。
首次拉取成功后,其中的 hasMore 表示是否还有下一页(ture 表示还有下一页,false 表示已经拉取完成)。
用户继续向上拉取会话列表时,如果还有更多数据,可以继续调用 getConversationList 接口,cursor 传递上一页返回 BIMConversationListResult 中的 nextCursor, 如首次拉取则 cursor 传参为 -1。
重复步骤 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 会在登录成功后、用户上线后、断线重连后,自动触发会话列表更新。 为获取会话列表的更新,你需要进行如下几步操作:
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) { //会话总未读数变化回调 } @Override public void onConversationRead(String conversationId, long fromUid) { //收到会话已读回执回调 } });
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 中以小红点或者数字角标的方式,向用户展示该会话的未读消息数,提醒用户阅读。
BIMClient.getInstance().getTotalUnreadMessageCount(new BIMResultCallback<BIMUnReadInfo>() { @Override public void onSuccess(BIMUnReadInfo bimUnReadInfo) { } @Override public void onFailed(BIMErrorCode bimErrorCode) { } });
BIMClient.getInstance().addConversationListener(new BIMConversationListListener() { //...其他回调 @Override public void onTotalUnreadMessageCountChanged(int i) { } });
/** * @type api * @brief 获取会话未读数 * @return 会话未读数 */ public long getUnReadCount()
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);