手把手教你使用环信EaseIMkit实现会话列表

前言

EaseIMKit 是基于环信 IM SDK 的一款 UI 组件库,它提供了一些通用的 UI 组件,例如‘会话列表’、‘聊天界面’和‘联系人列表’等,开发者可根据实际业务需求通过该组件库快速地搭建自定义 IM 应用。

EaseIMKit 中的组件在实现 UI 功能的同时,调用 IM SDK 相应的接口实现 IM 相关逻辑和数据的处理,因而开发者在使用 EaseIMKit 时只需关注自身业务或个性化扩展即可。本篇文章,我们将主要教大家如何实现会话列表功能

开发环境要求:

  • Android Studio 3.2 以上
  • Gradle 4.6 以上
  • targetVersion 26 以上
  • Android SDK API 19 以上
  • Java JDK 1.8 以上

前提条件:

  • 完成EaseIMKit的依赖 :查看文档
  • 完成EaseIMKit的初始化:查看文档
  • 环信登录成功:查看文档

会话列表页面:

EaseIMKit 提供了 EaseConversationListFragment,需要将其或者其子类添加到 Activity 中。开发者需要对刷新事件(新消息,删除消息,删除会话等)进行处理。
创建子类 ConversationFragment 继承 EaseConversationListFragment

  1. 设置数据

注: super.initData() 指向父类的方法加载本地会话列表;

1)只取本地的会话列表;

public class ConversationListFragment extends EaseConversationListFragment  {
  @Override
    public void initView(Bundle savedInstanceState) {
        super.initView(savedInstanceState);
    }
}

2)当需要从服务端拉取会话列表时,可以在满足条件时,从服务端拉取,不满足条件的话,从本地获取;

@Override
    public void initData() {
        //需要两个条件,判断是否触发从服务器拉取会话列表的时机,一是第一次安装,二则本地数据库没有会话列表数据
        if(DemoHelper.getInstance().isFirstInstall()
                && EMClient.getInstance().chatManager().getAllConversations().isEmpty()) {
            // limit: 每页返回的会话数。取值范围为 [1,50]。
            // cursor: 开始获取数据的游标位置。若获取数据时传 `null` 或者空字符串(""),SDK 从最新活跃的会话开始获取。
            int limit = 10;
            String cursor = "";
            EMClient.getInstance().chatManager().asyncFetchConversationsFromServer(limit, cursor, 
                    new EMValueCallBack<EMCursorResult<EMConversation>>() {
                @Override
                public void onSuccess(EMCursorResult<EMConversation> result) {
                    // 获取到的会话列表
                    List<EMConversation> conversations = result.getData();
                    // 下一次请求的 cursor
                    String nextCursor = result.getCursor();
                }

                @Override
                public void onError(int error, String errorMsg) {

                }
            });

        }else {
            super.initData();
        }
    }

  1. 添加搜索会话布局
@Override
    public void initView(Bundle savedInstanceState) {
        super.initView(savedInstanceState);
        //添加搜索会话布局
        View view = LayoutInflater.from(mContext).inflate(R.layout.demo_layout_search, null);
        llRoot.addView(view, 0);
    }

  1. 会话置顶,取消会话置顶,删除会话;

重写父类的onMenuItemClick方法;

@Override
    public boolean onMenuItemClick(MenuItem item, int position) {
        EaseConversationInfo info = conversationListLayout.getItem(position);
        Object object = info.getInfo();
        if(object instanceof EMConversation) {
            switch (item.getItemId()) {
                case R.id.action_con_make_top :
                    conversationListLayout.makeConversationTop(position, info);
                    return true;
                case R.id.action_con_cancel_top :
                    conversationListLayout.cancelConversationTop(position, info);
                    return true;
                case R.id.action_con_delete :
                    conversationListLayout.deleteConversation(position, info);
                    return true;
            }
        }
        return super.onMenuItemClick(item, position);
    }


  1. 刷新会话列表方法:

conversationListLayout.loadDefaultData();

  private void refreshList() {
       conversationListLayout.loadDefaultData();
    }
  1. 添加空页面
@Override
    public void initView(Bundle savedInstanceState) {
        super.initView(savedInstanceState);
        //添加空页面
   conversationListLayout.getListAdapter().setEmptyLayoutId(R.layout.ease_layout_default_no_data);
    }

  1. 单个item的点击事件

重写父类onItemClick方法;

@Override
    public void onItemClick(View view, int position) {
        super.onItemClick(view, position);
        Object item = conversationListLayout.getItem(position).getInfo();
        if(item instanceof EMConversation) {
            if(EaseSystemMsgManager.getInstance().isSystemConversation((EMConversation) item)) {
                SystemMsgsActivity.actionStart(mContext);
            }else {
                ChatActivity.actionStart(mContext, ((EMConversation)item).conversationId(), EaseCommonUtils.getChatType((EMConversation) item));
            }
        }
    }

按照以上步骤,就完成了EaseIMKit会话列表的基本功能,如果实现会话列表其他功能,请参考官方文档

参考链接:

  • 注册环信即时通讯IM:https://console.easemob.com/user/register

  • 环信IM集成文档:https://docs-im-beta.easemob.com/document/ios/quickstart.html

你可能感兴趣的:(集成IM教程,即时通讯,会话)