IM实战:Android接入环信 IM SDK
迪丽瓦拉
2025-06-01 02:41:51
0

本次学习目标:

  1. 注册环信;
  2. Android端集成环信 IM SDK;
  3. 实现注册-登录-发送消息-会话列表等;

一、环信IM

       什么是环信IM

环信IM是一款即时通讯产品,为开发者提供基于移动互联网的即时通讯能力,如单聊、群聊、发语音、发图片、发位置等,让开发者摆脱繁重的移动IM通讯底层开发,24小时即可让App拥有内置IM能力。

      环信IM可以实现什么?

实现了个人与个人,群组,聊天室发消息,发语音,发图片,发位置等功能,提供了一套供开发者拿来即用的EaseIMKit的ui库;

二、 环信IM实现通讯的基本流程

  1. 环信账号
  • a、找到环信im官网,注册一个管理者账号 ,注册地址:https://console.easemob.com/user/register
  • b、注册成功以后,点击右上角登录 > 登录即时通讯云 ,进入console后台
  • c、在环信通讯云控制台创建Appkey;

88689e05e85e4717d5832bd5300c82b9.png

2、Android端接入环信SDK

选择如下任意一种方式将环信即时通讯 IM SDK 集成到你的项目中(以下集成方式只需选择一种,同时使用多种集成方式可能会报错):

方法一:

该方法仅适用于 v3.8.2 或以上版本。

1.在项目的 build.gradle 中添加 mavenCentral()仓库。

buildscript {repositories {...mavenCentral()}...
}allprojects {repositories {...mavenCentral()}
}

2.在 module 的 build.gradle 中添加如下依赖:

dependencies {...// x.y.z 请填写具体版本号,如:3.9.4。// 可通过 SDK 发版说明获得最新版本号。implementation 'io.hyphenate:hyphenate-chat:x.x.x'
}

方法二:

手动复制 SDK 文件

打开 SDK 下载页面,获取最新版的环信即时通讯 IM Android SDK,然后解压。

将 SDK 包内 libs 路径下的如下文件,拷贝到你的项目路径下:

3、Android端注册与登录

(1)在主进程中进行初始化:

EMOptions options = new EMOptions();
options.setAppKey("Your appkey");
......// 其他 EMOptions 配置。
EMClient.getInstance().init(context, options);

(2)创建账号

此方法为同步方法,会阻塞当前线程;

此方法只有在开放注册模式下,才能调用。如果此方法报错,请检查下环信管理后台是否是开放注册模式;

// 注册失败会抛出 HyphenateException。
// 同步方法,会阻塞当前线程。
EMClient.getInstance().createAccount(mAccount, mPassword);

(3)登录账号

EMClient.getInstance().login(mAccount, mPassword, new EMCallBack() {// 登录成功回调@Override public void onSuccess() {}// 登录失败回调,包含错误信息@Override public void onError(final int code, final String error) {}@Override public void onProgress(int i, String s) {}});

4、Android端添加好友获取好友列表

(1)添加好友:

// 同步方法,会阻塞当前线程。异步方法为 asyncAddContact(String, String, EMCallBack)。
EMClient.getInstance().contactManager().addContact(toAddUsername, reason);

(2)获取好友列表:

// 从服务器获取好友列表。
// 同步方法,会阻塞当前线程。异步方法为 asyncGetAllContactsFromServer(EMValueCallBack)。
List usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
// 从本地数据库获取好友列表。
List usernames = EMClient.getInstance().contactManager().getContactsFromLocal();

5、Android端实现发送文本消息

发送一条单聊消息

// `content` 为要发送的文本内容,`toChatUsername` 为对方的账号。
EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername);
// 发送消息
EMClient.getInstance().chatManager().sendMessage(message);

6、Android端实现接收消息

你可以用注册监听 EMMessageListener 接收消息。

该 EMMessageListener 可以多次添加,请记得在不需要的时候移除 listener,

如在activity 的 onDestroy() 时。

在新消息到来时,你会收到 onMessageReceived 的回调,消息接收时可能是一条,

也可能是多条。你可以在该回调里遍历消息队列,解析并显示收到的消息。

EMMessageListener msgListener = new EMMessageListener() {// 收到消息,遍历消息队列,解析和显示。@Overridepublic void onMessageReceived(List messages) {}
};
// 注册消息监听
EMClient.getInstance().chatManager().addMessageListener(msgListener);
// 解注册消息监听
EMClient.getInstance().chatManager().removeMessageListener(msgListener);

7、EaseIMKit 创建聊天列表页面

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

必须向 EaseChatFragment 传递的参数为:

conversationId——会话 ID,单聊时指对方 ID,群聊和聊天室时指群和聊天室 ID;

chatType——聊天类型,整型,分别为单聊(1)、群聊(2)和聊天室(3);

可选传递参数为:

history_msg_id——消息 ID,用于查询历史记录时的定位消息 ID;

isRoaming——是否开启漫游,布尔类型,用于标记是否优先从服务器拉取消息。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2)                     EaseChatFragment chatFragment = new EaseChatFragment();Bundle bundle = new Bundle();bundle.putString(EaseConstant.EXTRA_CONVERSATION_ID, "环信id");bundle.putInt(EaseConstant.EXTRA_CHAT_TYPE, 1);chatFragment.setArguments(bundle);getSupportFragmentManager().beginTransaction().replace(R.id.container,chatFragment,"chat").commit();                 
}

8、EaseIMKit 创建会话列表页面

EaseIMKit 提供了 EaseConversationListFragment,需要将其或者其子类添加到

Activity 中。开发者需要对刷新事件(新消息,删除消息,删除会话等)进行处理。

1.加载会话:

public void loadDefaultData() {presenter.loadData();
}

2.设置数据

 public void setData(List data) {presenter.sortData(data);
}

3.删除会话

@Override
public void deleteConversation(int position, EaseConversationInfo info) {presenter.deleteConversation(position, info);
}

​​​​​​​9、EaseIMKit 添加联系人页面

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

1.设置数据

public void setData(List data) {presenter.sortData(data);
}

到这里我们已经完成了Android端SDK集成,并实现了IM基本功能,相信以各位小伙伴的能力接着的优化完全不是问题,当然也说不定有些奇葩问题搞不定,建议可以去环信官网联系官方技术支持,快速帮你解决遇到的问题~~

环信官网:https://www.easemob.com/

注册环信账号:注册环信即时通讯云

Android端SDK下载:https://www.easemob.com/download/im

问题交流:https://www.imgeek.net/

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...