全部文档

更新时间: 2021-03-10

# 功能描述

在应用的整个生命周期,此方法只需要调用一次,之后无论是网络异常或者 App 有前后台的切换,SDK 都会自动重连,直到开发者主动断开连接。

当应用被杀死后, 接收到推送通知并点击通知重新唤起应用后, 需要再次调用 connect() 方法进行连接。SDK 内部实现了重连机制. 详细可查看 重连说明

# 1.调用连接接口

# 接口示例 1
# 参数说明
参数 类型 必填 说明
token NSString 需要您的 Server 调用 融云服务获取 Token
onDatabaseOpened Callback - 本地消息数据库打开的回调
onSuccess Callback - 连接建立成功的回调
onError Callback - 连接建立失败的回调

回调参数说明

onDatabaseOpened 说明:

回调参数 回调类型 说明
code DatabaseOpenStatus 数据库是否已打开

onSuccess 说明:

回调参数 回调类型 说明
userId String 当前连接成功的用户 ID

onError 说明:

回调参数 回调类型 说明
status [ConnectionErrorCode] 连接失败的错误码
# 代码示例
RongIMClient.connect("用户Token", new RongIMClient.ConnectCallback() {
    @Override
    public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
        //消息数据库打开,可以进入到主页面
    }

    @Override
    public void onSuccess(String s) {
        //连接成功
    }

    @Override
    public void onError(RongIMClient.ConnectionErrorCode errorCode) {
        if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
            //从 APP 服务获取新 token,并重连
        } else {
            //无法连接 IM 服务器,请根据相应的错误码作出对应处理
        }
    }
})
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 接口示例 2
# 参数说明
参数 类型 必填 说明
token NSString 需要您的 Server 调用 融云服务获取 Token
timeLimit int SDK 连接超时时间,单位:秒
onDatabaseOpened Callback - 本地消息数据库打开的回调
onSuccess Callback - 连接建立成功的回调
onError Callback - 连接建立失败的回调

回调参数说明

timeLimit 说明:

参数 取值范围 说明
timeLimit <=0 SDK 会一直连接,直到连接成功或者出现 SDK 无法处理的错误(如 token 非法),等效于上面的连接接口。
timeLimit >0 SDK 最多连接 timeLimit 秒,超时则返回 RC_CONNECT_TIMEOUT 错误,并不再重连。

onDatabaseOpened 说明:

回调参数 回调类型 说明
code DatabaseOpenStatus 数据库是否已打开

onSuccess 说明:

回调参数 回调类型 说明
userId String 当前连接成功的用户 ID

onError 说明:

回调参数 回调类型 说明
status [ConnectionErrorCode] 连接失败的错误码
# 代码示例
RongIMClient.connect("用户Token",5, new RongIMClient.ConnectCallback() {
    @Override
    public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
        //消息数据库打开,可以进入到主页面
    }

    @Override
    public void onSuccess(String s) {
        //连接成功
    }

    @Override
    public void onError(RongIMClient.ConnectionErrorCode errorCode) {
        if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
            //从 APP 服务获取新 token,并重连
        } else if (errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONNECT_TIMEOUT)) {
            //连接超时,弹出提示,可以引导用户等待网络正常的时候再次点击进行连接
        } else {
            //无法连接 IM 服务器,请根据相应的错误码作出对应处理
        }
    }
})
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

特殊说明:

当回调 onError 时 SDK 不会再进行重连,不可重连的错误见文末

可重连的错误(如 31006 等),SDK 内部会进行重连,不回调 onError;等遇到无法重连的错误,才会回调 onError 
已复制
1
2
3

# 2.设置连接监听

# 代码示例
//其中 this 最好为单例类,以此保证在整个 APP 生命周期,该类都能够检测到 SDK 连接状态的变更
RongIMClient.setConnectionStatusListener(this);

public void onChanged(ConnectionStatus connectionStatus) {
    if (connectionStatus.equals(ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT)) {
        //当前用户账号在其他端登录,请提示用户并做出对应处理
    } else if (connectionStatus.equals(ConnectionStatus.CONN_USER_BLOCKED)) {
        //用户被封禁,请提示用户并做出对应处理
    }
}
已复制
1
2
3
4
5
6
7
8
9
10

接口调用建议

用户初次登录:建议调用带 timeLimit 的接口,并为其设置有效值,保证初次登录如遇到异常情况(如网络较差等)SDK 可以及时回调连接超时,由 APP 自行处理重连

用户后续免密登录:后续登录说明 token 已经是合法可用的,那么 APP 直接调用没有 timeLimit 的接口,IM 的连接完全由 IM SDK 接口,APP 不需要额外处理

  1. 整个应用的生命周期里只需要调用一次连接方法, 且须在 主进程 调用.
  2. RC_CONN_TOKEN_INCORRECT 错误, 可能是 token 过期造成. 需要向服务器重新获取 Token 并建立连接,但要注意避免无限循环,以免影响 App 用户体验.

错误码详情, 请查看 错误码表

文档是否解决您的问题 ?

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