更新时间: 2021-04-21

以下内容为快速集成摘要,具体细节可依次参考全局配置

# 导入 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 方式
  1. 在工程根目录下的 build.gradle 配置脚本的 allprojects 中添加 SDK 的 Maven 仓库地址, 如下:
allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven {url  "http://maven.rongcloud.cn/repository/maven-releases/"}
    }
}
已复制
1
2
3
4
5
6
7
  1. 在项目主工程中的 build.gradle 添加远程依赖, 如下:
api 'cn.rongcloud.sdk:im_lib:4.0.0.1'
已复制
1
# Module 方式
  1. 下载 Module
  1. 导入 Module
  • 打开工程, File -> New -> Import Module. 找到下载的 Module 组件导入.
  • 在主工程的 build.gradle 文件中配置 Module, 如下:
dependencies {
    ...
    api project(':IMLib')
    ...
}
已复制
1
2
3
4
5

查看 SDK 中 API 的方法

导入 javadoc 后可以轻松的在 Android Studio 中查看 API 的详细说明,如图:

导入方法请 点击查看 (opens new window)

# 初始化

融云 SDK 需要开发者在工程中调用下面方法来初始化 SDK。在 App 的整个生命周期中,开发者只需要将 SDK 初始化一次。

  1. Appkey 区分 开发环境生产环境,开发者在使用时注意当前环境是否匹配
  2. 建议在用户接受 隐私协议后,再进行初始化

以下代码示范了如何在用户接受隐私协议后初始化 IM

/**
 * 应用启动时,判断用户是否已接受隐私协议,如果已接受,正常初始化;否则跳转到隐私授权页面请求用户授权。
 */
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        //伪代码,从 sp 里读取用户是否已接受隐私协议
        boolean isPrivacyAccepted = getPrivacyStateFromSp();
        //用户已接受隐私协议,进行初始化
        if (isPrivacyAccepted) {
            String appKey = "融云开发者后台创建的应用的 AppKey";
            //第一个参数必须传应用上下文
            RongIM.init(this.getApplicationContext(), appKey);
        } else {
            //用户未接受隐私协议,跳转到隐私授权页面。
            goToPrivacyActivity();
        }
        ...
    }
}

/**
 * 该类为隐私授权页面,在用户接受隐私协议后进行初始化。
 */
public class PrivacyActivity extends Activity implements View.OnClickListener {
    ...
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.accept_privacy:
                //伪代码,保存到 sp
                savePrivacyStateToSp();

                String appKey = "融云开发者后台创建的应用的 AppKey";
                //第一个参数必须传应用上下文
                RongIM.init(this.getApplicationContext(), appKey);
                break;
            default:
                ...
        }
    }
}
已复制
1
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

# 连接融云

连接服务器之前需先获取用户 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) {

            }
        });
已复制
1
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);
已复制
1
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) {

        }
    });              

已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

更多消息类型发送示例可参考 单聊会话发送消息群聊会话发送消息聊天室会话发送消息

更多消息操作(如 消息删除、消息插入、消息获取等 ) 可到对应的会话场景下的 消息管理 查看.

# 接收消息

设置消息接收监听器。所有接收到的消息(包括单聊消息、群组消息、聊天室消息等)都会在此接口方法中回调, 全局设置一次即可.

  1. 建议在 Application 中注册消息监听.
  2. 在 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) {

    }
});
已复制
1
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) {

        }
    });
已复制
1
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) {

        }
    });
已复制
1
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()
已复制
1

退出登录

不想收到任何推送通知并断开连接,需调用 logout() 方法. 切换账号操作也需调用 logout() 方法.

RongIMClient.getInstance().logout()
已复制
1

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助