更新时间: 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
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
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
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
2
3
4
5
6
7
8
9
10
接口调用建议
用户初次登录
:建议调用带 timeLimit 的接口,并为其设置有效值,保证初次登录如遇到异常情况(如网络较差等)SDK 可以及时回调连接超时,由 APP 自行处理重连
用户后续免密登录
:后续登录说明 token 已经是合法可用的,那么 APP 直接调用没有 timeLimit 的接口,IM 的连接完全由 IM SDK 接口,APP 不需要额外处理
- 整个应用的生命周期里只需要调用一次连接方法, 且须在 主进程 调用.
RC_CONN_TOKEN_INCORRECT
错误, 可能是 token 过期造成. 需要向服务器重新获取 Token 并建立连接,但要注意避免无限循环,以免影响 App 用户体验.
错误码详情, 请查看 错误码表