上云无忧 > 文档中心 > 环信IM即时通讯使用教程(Android) - EaseIMKit 使用指南
IM即时通讯
环信IM即时通讯使用教程(Android) - EaseIMKit 使用指南

文档简介:
在您阅读此文档时,我们假定您已经具备了基础的 Android 应用开发经验,并能够理解相关基础概念。此文档是针对导入 EaseIMKit 库的快速集成文档,如果只是导入 SDK 集成使用,请参考 环信即时通讯 IM Android 快速开始。
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

在您阅读此文档时,我们假定您已经具备了基础的 Android 应用开发经验,并能够理解相关基础概念。此文档是针对导入 EaseIMKit 库的快速集成文档,如果只是导入 SDK 集成使用,请参考 环信即时通讯 IM Android 快速开始。

简介

EaseIMKit 是什么?

EaseIMKit 是 EaseUI 的升级版,是基于环信 IM SDK 的一款 UI 组件库,它提供了一些通用的 UI 组件,例如‘会话列表’、‘聊天界面’和‘联系人列表’等,开发者可根据实际业务需求通过该组件库快速地搭建自定义 IM 应用。EaseIMKit 中的组件在实现 UI 功能的同时,调用 IM SDK 相应的接口实现 IM 相关逻辑和数据的处理,因而开发者在使用 EaseIMKit 时只需关注自身业务或个性化扩展即可。

EaseIMKit 源码地址

  • EaseIMKit(opens new window)

使用 EaseIMKIt 的环信 IM APP 源码地址:

  • 环信 IM(opens new window)

导入 EaseIMKit

开发环境要求

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

集成说明

EaseIMKit 支持 Gradle 接入和 Module 源码集成

Gradle 接入集成

重大变动

远程仓库统一由 JCenter 迁移到 MavenCentral,依赖库的域名由 “com.hyphenate” 修改为 “io.hyphenate”,详见 环信即时通讯 IM Android 快速开始。

implementation 'io.hyphenate:ease-im-kit:xxx版本'
implementation 'io.hyphenate:hyphenate-chat:xxx版本'

EaseIMKit 必须依赖环信 IM SDK,因而在使用 EaseIMKit 时必须同时添加环信 IM SDK 依赖。

注意

  1. IM SDK 3.8.0 版本以后,远程依赖的 artifactId 修改为 hyphenate-chat,且该版本以后中不再包含音视频相关逻辑。
  2. IM SDK 3.8.0 以下,远程依赖,包含音视频的 artifactId 为 hyphenate-sdk,不包含音视频的 artifactId 为 hyphenate-sdk-lite。如果想使用不包含音视频通话的 SDK,用 implementation 'io.hyphenate:hyphenate-sdk-lite:xxx版本'。

版本号参考 Android SDK 更新日志。

Module 源码集成

implementation project(':ease-im-kit')

依赖的第三方库

  • Glide: 图片处理库,显示用户头像时用到。
  • BaiduLBS_Android.jar: 百度地图定位库。

关于位置消息说明

EaseIMKit 中位置消息使用的是百度地图定位 jar 包,为了防止出现百度地图类冲突的问题,EaseIMKit 库打包时对百度地图定位 jar 包采用了只编译的方式,这就要求如果开发者想要使用位置消息,需要在自己的项目中添加百度地图定位的 jar 包及其 so 文件。

初始化

在 application 的 onCreate 下调用初始化 EaseIMKit 的方法。

注意

EaseIMKit 初始化里已包含 SDK 的初始化,不需要再去调用 SDK 的初始化。

public class DemoApplication extends Application { @Override public void onCreate() { super.onCreate();
 //EaseIM 初始化 if(EaseIM.getInstance().init(context, options)){ //在做打包混淆时,关闭 debug 模式,
避免消耗不必要的资源 EMClient.getInstance().setDebugMode(true); //EaseIM 初始化成功之后再调用注册消息监听的代码 ... } } } 

快速搭建

EaseIMKit 封装了常用 IM 功能,提供了会话,聊天及联系人等基本的 fragment,旨在帮助开发者快速集成环信 SDK。

创建会话列表界面

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

注意

要实现自定义头像及昵称,请参考 设置头像和昵称。

创建聊天界面

EaseIMKit 提供了 EaseChatFragment,添加到 Activity 中并传递相应的参数即可用。 必须向 EaseChatFragment 传递的参数为:

  • conversationId——会话 ID,单聊时指对方 ID,群聊和聊天室时指群和聊天室 ID;
  • chatType——聊天类型,整型,分别为单聊(1)、群聊(2)和聊天室(3);

可选传递参数为:

  • history_msg_id——消息 ID,用于查询历史记录时的定位消息 ID;
  • isRoaming——是否开启漫游,布尔类型,用于标记是否优先从服务器拉取消息。

public class ChatActivity extends BaseActivity { private EaseChatFragment chatFragment; @Override
 protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.em_activity_chat); 
//use EaseChatFratFragment chatFragment = new EaseChatFragment(); //pass parameters to chat fragment 
chatFragment.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction()
.add(R.id.container, chatFragment).commit(); } } 

添加联系人界面

EaseIMKit 提供了 EaseContactListFragment,添加其及其子类到 Activity 中。开发者需要对刷新事件(添加联系人,删除联系人等)进行处理。

设置样式

设置标题栏

EaseIMKit 提供了自定义的标题栏控件 EaseTitleBar。

标题栏除了做为 View 所具有的属性功能外,还可以设置标题的位置等。

xml 中设置如下:

<com.hyphenate.easeui.widget.EaseTitleBar android:id="@+id/title_bar" android:layout_width="match_parent"
 android:layout_height="@dimen/em_common_title_bar_height" app:titleBarTitle="@string/em_chat_group_detail_title" 
android:background="@color/white" app:titleBarDisplayHomeAsUpEnabled="true"/> 

其中 titleBarDisplayHomeAsUpEnabled 属性为设置返回按钮是否可见,设置标题位置可设置 titleBarTitlePosition,可选值为 center,left 和 right。

也可进行代码设置,如下:

EaseTitleBar titleBarMessage = findViewById(R.id.title_bar_message); //设置右侧菜单图标 titleBarMessage.
setRightImageResource(R.drawable.chat_user_info); //设置标题 titleBarMessage.setTitle("标题"); //设置标题位置
 titleBarMessage.setTitlePosition(EaseTitleBar.TitlePosition.Left); //设置右侧菜单图标的点击事件
 titleBarMessage.setOnRightClickListener(this); //设置返回按钮的点击事件 titleBarMessage.setOnBackPressListener(this); 

当然设置右侧菜单,您也可以通过 Android 提供的添加 menu xml 的形式实现。修改按钮图标,可以调用 titleBarMenuResource 属性进行设置。

设置会话列表

会话列表可以修改如下样式:

  • 头像:头像大小,头像形状(方形,带圆角的方形,圆形),描边
  • 标题、内容、时间等文字:字体大小,字体颜色
  • 未读消息:可设置是否展示,展示位置(左式和右式)

在 EaseConversationListFragment 及其子类中可以直接获取到 EaseConversationListLayout 这个控件,然后通过这个控件进行设置。

代码如下:

//设置头像尺寸 conversationListLayout.setAvatarSize(EaseCommonUtils.dip2px(mContext, 50));
 //设置头像样式:0 为默认,1 为圆形,2 为方形(设置方形时,需要配合设置 avatarRadius,默认的 
avatarRadius 为 50dp) conversationListLayout.setAvatarShapeType(2); //设置圆角半径
 conversationListLayout.setAvatarRadius((int) EaseCommonUtils.dip2px(mContext, 5)); 
//设置标题字体的颜色 conversationListLayout.setTitleTextColor(ContextCompat.getColor(mContext, 
R.color.red)); //设置是否隐藏未读消息数,默认为不隐藏 conversationListLayout.hideUnreadDot(false);
 //设置未读消息数展示位置,默认为左侧 conversationListLayout.showUnreadDotPosition
(EaseConversationSetStyle.UnreadDotPosition.LEFT); 

效果如下图:

更多样式请参考 EaseContactListLayout 控件。

增加长按菜单项

EaseConversationListLayout 提供了增加菜单项的 API,开发者可方便的增加更多的菜单功能。 示例代码如下:

@Override public void initView(Bundle savedInstanceState) { super.initView(savedInstanceState)
; ...... conversationListLayout.addItemMenu(Menu.NONE, R.id.action_con_delete, 4, getString(R.string.ease
_conversation_menu_delete)); } ...... @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 : showDeleteDialog(position, info); return true; } 
} return super.onMenuItemClick(item, position); } 

设置聊天窗口

聊天窗口包括标题栏(不包含在 EaseChatFragment中),聊天区,输入区及扩展展示区,如下图所示:

标题区 EaseTitleBar 的具体布局及实现不在 EaseIMKit 库的聊天控件及 fragment 中,需要你自己去实现。 开发者可以在 EaseChatFragment 中获取到 EaseChatLayout 这个控件,然后通过这个控件进一步获取到获取其他控件,代码如下:

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout();
 //获取到菜单输入父控件 EaseChatInputMenu chatInputMenu = chatLayout.getChatInputMenu(); //获取到菜单输入控件
 IChatPrimaryMenu primaryMenu = chatInputMenu.getPrimaryMenu(); //获取到扩展区域控件 IChatExtendMenu 
chatExtendMenu = chatInputMenu.getChatExtendMenu(); //获取到表情区域控件 IChatEmojiconMenu emojiconMenu 
= chatInputMenu.getEmojiconMenu(); 

修改聊天列表样式

聊天列表区域可以修改背景,文字,气泡,是否展示昵称及聊天展示样式等,更多设置请参考 IChatMessageItemSet。

修改聊天列表背景

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout(); 
//设置聊天列表背景 messageListLayout.setBackground(new ColorDrawable(Color.parseColor("#DA5A4D"))); 

效果如下图:

修改头像属性

开发者可以设置默认头像和头像形状。

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout(); 
//设置默认头像 messageListLayout.setAvatarDefaultSrc(ContextCompat.getDrawable(mContext, R.drawable.
ease_default_avatar)); //设置头像形状:0 为默认,1 为圆形,2 为方形 messageListLayout.setAvatarShapeType(1); 

效果如下图:

修改聊天文本

开发者可以修改聊天文本的字体大小及字体颜色,发送方及接收方需保持一致。

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout();
 //设置文本字体大小 messageListLayout.setItemTextSize((int) EaseCommonUtils.sp2px(mContext, 18));
 //设置文本字体颜色 messageListLayout.setItemTextColor(ContextCompat.getColor(mContext, R.color.red)); 

效果如下图:

修改时间线样式

开发者可以修改时间线的背景,文字的大小及颜色。

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout();
 //设置时间线的背景 messageListLayout.setTimeBackground(ContextCompat.getDrawable(mContext, R.color.gray_normal));
 //设置时间线的文本大小 messageListLayout.setTimeTextSize((int) EaseCommonUtils.sp2px(mContext, 18)); 
//设置时间线的文本颜色 messageListLayout.setTimeTextColor(ContextCompat.getColor(mContext, R.color.black)); 

效果如下图:

修改聊天列表展示样式

开发者可以设置聊天列表的样式,发送方和接收方位于两侧还是位于一侧。

//获取到聊天列表控件 EaseChatMessageListLayout messageListLayout = chatLayout.getChatMessageListLayout();
 //设置聊天列表样式:两侧及均位于左侧 messageListLayout.setItemShowType(EaseChatMessageListLayout.ShowType.LEFT); 

效果如下图:

修改输入区样式

输入区控件为 EaseChatInputMenu,它由输入控件 EaseChatPrimaryMenu,扩展控件 EaseChatExtendMenu 和表情控件 EaseEmojiconMenu 组成。

//获取到菜单输入父控件 EaseChatInputMenu chatInputMenu = chatLayout.getChatInputMenu(); //获取到菜单输入控件
 IChatPrimaryMenu primaryMenu = chatInputMenu.getPrimaryMenu(); //获取到扩展区域控件 IChatExtendMenu 
chatExtendMenu = chatInputMenu.getChatExtendMenu(); //获取到表情区域控件 IChatEmojiconMenu emojiconMenu 
= chatInputMenu.getEmojiconMenu(); 

开发者可以修改菜单输入控件的样式,其有 5 种模式,即 完整模式,不可用语音模式,不可用表情模式,不可用语音和表情模式 和 只有文本输入模式。

//获取到菜单输入父控件 EaseChatInputMenu chatInputMenu = chatLayout.getChatInputMenu(); //获取到菜单输入控件
 IChatPrimaryMenu primaryMenu = chatInputMenu.getPrimaryMenu(); if(primaryMenu != null) { 
//设置菜单样式为不可用语音模式 primaryMenu.setMenuShowType(EaseInputMenuStyle.DISABLE_VOICE); } 

效果(EaseInputMenuStyle.DISABLE_VOICE)如下图:

其他样式为:

完整模式(EaseInputMenuStyle.All):

不可用表情模式(EaseInputMenuStyle.DISABLE_EMOJICON):

不可用语音和表情模式(EaseInputMenuStyle.DISABLE_VOICE_EMOJICON):

只有文本输入模式(EaseInputMenuStyle.ONLY_TEXT):

增加自定义消息类型及其布局

EaseIMKit 中已经为八种基本消息类型文本,表情,图片,视频,语音,文件,定位及 Custom 提供了基本的布局,ViewHolder 及 Delegate,开发者可以直接使用。但是这些类型很可能不能满足开发者的需求,那么就需要添加新的消息类型及其布局和逻辑。 使用 EaseIMKit 只需按照以下 5 步即可快速添加自定义消息类型。 下面我们以自定一个新的文本消息为例:

1、新建 ChatTxtNewAdapterDelegate 继承 EaseMessageAdapterDelegate。

public class ChatTxtNewAdapterDelegate extends EaseMessageAdapterDelegate <EMMessage, EaseChatRowViewHolder>
 { @Override protected EaseChatRow getEaseChatRow(ViewGroup parent, boolean isSender) { return null; }
 @Override protected EaseChatRowViewHolder createViewHolder(View view, MessageListItemClickListener
 itemClickListener) { return null; } } 

2、新建 ChatRowTxtNew 继承 EaseChatRow 并实现相关方法

public class ChatRowTxtNew extends EaseChatRow { private TextView contentView; public
 ChatRowTxtNew(Context context, boolean isSender) { super(context, isSender); } @Override
 protected void onInflateView() { inflater.inflate(isSender ? R.layout.ease_row_sent_txt_new
 : R.layout.ease_row_received_txt_new, this); } @Override protected void onFindViewById()
 { contentView = (TextView) findViewById(com.hyphenate.easeui.R.id.tv_chatcontent); } @Override
 protected void onSetUpView() { EMTextMessageBody txtBody = (EMTextMessageBody) message.getBody()
; contentView.setText(txtBody.getMessage()); } } 

布局文件以 R.layout.ease_row_sent_txt_new 为例,如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
android:layout_height="wrap_content" xmlns:tools="http://schemas.android.com/tools" android:gravity="center
_horizontal" android:orientation="vertical" android:paddingTop="13dp"> <TextView android:id="@+id/timestamp" 
style="@style/chat_text_date_style" android:layout_width="wrap_content" android:layout_height="wrap_content" 
/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"
 android:layout_marginTop="@dimen/margin_chat_activity" > <com.hyphenate.easeui.widget.EaseImageView 
android:id="@+id/iv_userhead" style="@style/ease_row_sent_iv_userhead_style"/> <RelativeLayout
 android:id="@+id/bubble" android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:layout_marginRight="@dimen/margin_chat_activity" android:layout_toLeftOf="@id/iv_userhead" 
android:minWidth="30dp" android:padding="8dp" android:layout_marginTop="2dp" android:background="
@drawable/ease_chat_bubble_send_bg" android:layout_below="@id/tv_userid"> <TextView android:id="@+id/tv_
chatcontent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_
centerVertical="true" android:autoLink="web" android:gravity="center|left" android:lineSpacingExtra="2dp"
 android:maxWidth="225.0dip" android:minHeight="@dimen/ease_chat_text_min_height" android:textColor="#000000"
 tools:text="环信" android:textSize="15sp" /> 

相似文档
  • 功能概述: EaseCallKit 是一套基于环信 IM 和声网音视频结合开发的音视频 UI 库,实现了一对一语音和视频通话以及多人音视频通话的功能。基于 EaseCallKit 可以快速实现通用音视频功能。
  • 环信即时通讯 IM iOS 端提供示例应用可供体验。 下载 Demo (opens new window)。 输入你的手机号,获取验证码,然后输入。 选择同意《环信服务条款》与《环信隐私协议》,然后点击 登录 登录 Demo。
  • 本文介绍如何快速集成环信即时通讯 IM iOS SDK 实现单聊。 实现原理: 下图展示在客户端发送和接收一对一文本消息的工作流程。 前提条件: Xcode (推荐最新版本)。 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple 设备。
  • 介绍 iOS 集成相关内容。 前提条件: 开始前,请注册有效的环信即时通讯 IM 开发者账号并获得 App key,详见 环信即时通讯云管理后台 (opens new window)。 集成环境: 详见 开发环境要求。 SDK 初始化: 初始化是使用 SDK 的必要步骤,需在执行所有接口方法调用前完成。
  • 静态配置 IP 地址(域名): SDK 默认指向公有云地址,在部署私有云后,需要将地址重新指向到新的地址,以下是地址修改方法: 注意: 如果需要配置 HTTPS 只需加一个属性即可。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部