注册

IM实战:Android接入环信 IM SDK

本次学习目标:
注册环信;
Android端集成环信 IM SDK;
实现注册-登录-发送消息-会话列表等;


一、环信IM
- 什么是环信IM

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

- 环信IM可以实现什么?

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

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


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


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<String> usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
// 从本地数据库获取好友列表。
List<String> 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() {

// 收到消息,遍历消息队列,解析和显示。
@Override
public void onMessageReceived(List<EMMessage> 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<EaseConversationInfo> 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<EaseUser> data) {
presenter.sortData(data);
}


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

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

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

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

0 个评论

要回复文章请先登录注册