更新时间: 2021-03-08
以下内容为快速集成摘要,具体细节可依次参考全局配置
# 导入 SDK
环境要求
名称 | 版本 |
---|---|
Android SDK Build-tools | 21 及以上 |
Android SDK | Android API 19 及以上(安卓 4.4 ) |
Java | JDK 1.7 及以上 |
Gradle | 3.0 及以上版本 |
SDK 2.10.2 及其以上版本对 Android Q 进行了适配。
SDK 2.9.17 及以上版本才可使用 Gradle 库形式的引入方式。
SDK 支持以下两种导入方式:
# Gradle 方式
- 在工程根目录下的
build.gradle
配置脚本的allprojects
中添加 SDK 的 Maven 仓库地址, 如下:
allprojects { repositories { jcenter() mavenCentral() maven {url "https://dl.bintray.com/rongcloud/maven"} } }
已复制
2
3
4
5
6
7
- 在项目主工程中的
build.gradle
添加远程依赖, 如下:
api 'cn.rongcloud.sdk:im_lib:4.0.0.1'
已复制
# Module 方式
- 下载 Module
- 到融云官网 下载 SDK Module (opens new window)
- 选择需要的 Module 进行下载, 如图:

- 导入 Module
- 打开工程,
File -> New -> Import Module
. 找到下载的 Module 组件导入. - 在主工程的
build.gradle
文件中配置 Module, 如下:
dependencies { ... api project(':IMLib') ... }
已复制
2
3
4
5
查看 SDK 中 API 的方法
导入 javadoc 后可以轻松的在 Android Studio 中查看 API 的详细说明,如图:

导入方法请 点击查看 (opens new window)
# 初始化
融云 SDK 需要开发者在工程中调用下面方法来初始化 SDK。在 App 的整个生命周期中,开发者只需要将 SDK 初始化一次。
- 2.9.19 之前版本集成时必须添加 libsqlite.so (opens new window) 文件, 2.9.19 版本自带 libsqlite.so 文件.
- Appkey 区分 开发环境 与 生产环境,开发者在使用时注意当前环境是否匹配
String appKey = "融云开发者后台所创建应用的 AppKey"; RongIMClient.init(Context context, appKey);
已复制
2
# 连接融云
连接服务器之前需先获取用户 token 才可进行连接. 具体获取方法可参考 Server API 获取 Token
String token = "用户Token"; RongIMClient.connect(token, new RongIMClient.ConnectCallback() { /** * 链接成功 * @param t 已声明的类型。 */ @Override public void onSuccess(String t) { } /** * 失败 * @param e 已声明的类型。 */ @Override public void onError(RongIMClient.ConnectionErrorCode e) { } /** * 数据库打开 * @param code 已声明的类型。 */ @Override public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) { } });
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 获取会话列表
// 分页获取会话列表 // timeStamp 首次传 0, 后续使用真实时间戳 long timeStamp = 0; // 每页数量, 最大为 10 条 int count = 10; RongIMClient.getInstance().getConversationListByPage(new RongIMClient. ResultCallback<List<Conversation>>() { /** * 成功回调 * @param conversations 获取的会话列表 */ @Override public void onSuccess(List<Conversation> conversations) { } /** * 错误回调 * @param errorCode 错误码 */ @Override public void onError(RongIMClient.ErrorCode ErrorCode) { } },timeStamp, count, ConversattionType.PRIVATE, ConversattionType.GROUP);
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
错误码详情, 请查看 错误码表
更多会话操作(如 获取指定会话, 删除会话, 会话置顶等 ) 可到对应的会话场景下的 会话管理 查看.
# 发送消息
以单聊会话类型发送文本消息为例:
String content = “消息内容” ConversationType conversationType = ConversationType.PRIVATE; // 构建消息 TextMessage messageContent = TextMessage.obtain(content); Message message = Message.obtain(targetId, conversationType, messageContent); // 发送消息 RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() { @Override public void onAttached(Message message) { } @Override public void onSuccess(Message message) { } @Override public void onError(Message message, RongIMClient.ErrorCode errorCode) { } });
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
更多消息类型发送示例可参考 单聊会话发送消息、群聊会话发送消息、聊天室会话发送消息
更多消息操作(如 消息删除、消息插入、消息获取等 ) 可到对应的会话场景下的 消息管理 查看.
# 接收消息
设置消息接收监听器。所有接收到的消息(包括单聊消息、群组消息、聊天室消息等)都会在此接口方法中回调, 全局设置一次即可.
- 建议在 Application 中注册消息监听.
- 在 Activity 中注册消息监听. 当 Activity 被释放回收后,将无法收到回调.
RongIMClient.getInstance().setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() { /** * 接收实时或者离线消息。 * 注意: * 1. 针对接收离线消息时,服务端会将 200 条消息打成一个包发到客户端,客户端对这包数据进行解析。 * 2. hasPackage 标识是否还有剩余的消息包,left 标识这包消息解析完逐条抛送给 App 层后,剩余多少条。 * 如何判断离线消息收完: * 1. hasPackage 和 left 都为 0; * 2. hasPackage 为 0 标识当前正在接收最后一包(200条)消息,left 为 0 标识最后一包的最后一条消息也已接收完毕。 * * @param message 接收到的消息对象 * @param left 每个数据包数据逐条上抛后,还剩余的条数 * @param hasPackage 是否在服务端还存在未下发的消息包 * @param offline 消息是否离线消息 * @return 是否处理消息。 如果 App 处理了此消息,返回 true; 否则返回 false 由 SDK 处理。 */ @Override public boolean onReceived(final Message message, final int left, boolean hasPackage, boolean offline) { } });
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 获取历史消息
获取本地历史消息
本地历史记录获取方法, 不支持聊天室会话类型.
// 会话类型. 可替换成其他会话类型(除聊天室会话类型外). ConversationType conversationType = ConversationType.PRIVATE; // 目标 ID, 可更具会话类型为 用户ID, 群 ID, 聊天室 ID. 此处为用户 ID. String targetId = "用户 ID"; // 当前消息列表中 sendTime 最小的消息ID. 消息 ID 不存在时, 应设置为-1 long lastMessageId = -1; // 每页消息的数量. 每页数量最多 20 条. int count = 10; RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, lastMessageId, count, new ResultCallback<List<Message>>() { /** * 成功时回调 * @param messages 获取的消息列表 */ @Override public void onSuccess(List<Message> messages) { } /** * 错误时回调。 * @param errorCode 错误码 */ @Override public void onError(ErrorCode errorCode) { } });
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
获取远端历史消息
从融云的服务器拉取历史消息( 不支持聊天室会话类型), 需要开通 IM 商用版 - 单群聊云存储 (opens new window) 功能。
// 会话类型. 可替换成其他会话类型(除聊天室会话类型外). ConversationType conversationType = ConversationType.PRIVATE; // 目标 ID, 可更具会话类型为 用户ID, 群 ID, 聊天室 ID. 此处为用户 ID. String targetId = "用户 ID"; //获取消息时间点, 从 dataTime 开始获取消息.取值分两种情况: 1. 消息对象中的 sentTime. 2. 传 0 , 表示获取最新 count 条消息 long dateTime = 0; // 每页消息的数量. 每页数量最多 20 条. int count = 20; RongIMClient.getInstance().getRemoteHistoryMessages(conversationType, targetId, dateTime, count, new ResultCallback<List<Message>>() { /** * 成功时回调 * @param messages 获取的消息列表 */ @Override public void onSuccess(List<Message> messages) { } /** * 错误时回调。 * @param errorCode 错误码 */ @Override public void onError(ErrorCode errorCode) { } });
已复制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
聊天室会话类型的消息获取可参考 聊天室历史消息获取
# 断开连接
断开连接
在断开和融云的连接后,有新消息时,仍然能够收到推送通知,调用 disconnect()
方法.
RongIMClient.getInstance().disconnect()
已复制
退出登录
不想收到任何推送通知并断开连接,需调用 logout() 方法. 切换账号操作也需调用 logout() 方法.
RongIMClient.getInstance().logout()
已复制