全部文档

更新时间: 2021-03-08

# 功能描述

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

# 调用连接接口

# 接口示例 1

输入参数:

参数 类型 必填 说明
token NSString 需要您的 Server 调用 融云服务获取 Token
dbOpenedBlock Block - 本地消息数据库打开的回调
successBlock Block - 连接建立成功的回调
errorBlock Block - 连接建立失败的回调

回调参数:

dbOpenedBlock 说明:

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

successBlock 说明:

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

errorBlock 说明:

回调参数 回调类型 说明
status RCConnectErrorCode (opens new window) 连接失败的错误码

代码示例:

[[RCIMClient sharedRCIMClient] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值"
        dbOpened:^(RCDBErrorCode code) {
            //消息数据库打开,可以进入到主页面
        }
        success:^(NSString *userId) {
            //连接成功
        }
        error:^(RCConnectErrorCode status) {
            if (status == RC_CONN_TOKEN_INCORRECT) {
                //从 APP 服务获取新 token,并重连
            } else {
                //无法连接到 IM 服务器,请根据相应的错误码作出对应处理
            }
        }]
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 接口示例 2

输入参数:

参数 类型 必填 说明
token NSString 需要您的 Server 调用 融云服务获取 Token
timeLimit int SDK 连接超时时间,单位:秒
dbOpenedBlock Block - 本地消息数据库打开的回调
successBlock Block - 连接建立成功的回调
errorBlock Block - 连接建立失败的回调

timeLimit 说明:

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

回调参数:

dbOpenedBlock 说明:

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

successBlock 说明:

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

errorBlock 说明:

回调参数 回调类型 说明
status RCConnectErrorCode (opens new window) 连接失败的错误码

代码示例:

[[RCIMClient sharedRCIMClient] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值" 
    timeLimit:5 
    dbOpened:^(RCDBErrorCode code) {
        //消息数据库打开,可以进入到主页面
    } success:^(NSString *userId) {
        //连接成功
    } error:^(RCConnectErrorCode status) {
        if (status == RC_CONN_TOKEN_INCORRECT) {
            //从 APP 服务获取新 token,并重连
        } else if(status == RC_CONNECT_TIMEOUT) {
            //连接超时,弹出提示,可以引导用户等待网络正常的时候再次点击进行连接
        } else {
            //无法连接 IM 服务器,请根据相应的错误码作出对应处理
        }
    }]
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

特殊说明:

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

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

常见的不可重连错误码 RC_CONN_TOKEN_INCORRECT token 非法的说明

原因 排查方案
token 错误 检查客户端初始化使用的 AppKey 和您服务器获取 Token 使用的 AppKey 是否一致
token 过期 检查开发者是否在 开发者后台 (opens new window) 设置了 Token 过期时间,过期之后需要请求您的服务器重新获取 Token 并再次用新的 Token 建立连接
  1. 31004 的情况下,您需要请求您的服务器重新获取 Token 并建立连接,但是注意避免无限循环,以免影响 App 用户体验。
  2. 此方法的回调并非为原调用线程,需要进行 UI 操作,请注意切换到主线程。
  3. 如果开发者是含 UI 集成,请使用 RCIM 中的同名方法建立与融云服务器的连接,而不要使用此方法。

# 设置连接监听

代码示例

//其中 self 最好为单例类(如 AppDelegate),以此保证在整个 APP 生命周期,该类都能够检测到 SDK 连接状态的变更
[[RCIMClient sharedRCIMClient] setConnectionStatusDelegate:self];

- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
    if (status == ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT) {
        //当前用户账号在其他端登录,请提示用户并做出对应处理
    } else if (status == ConnectionStatus_DISCONN_EXCEPTION) {
        //用户被封禁,请提示用户并做出对应处理
    }
}
已复制
1
2
3
4
5
6
7
8
9
10

接口调用建议

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

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

无法连接的错误码及其描述 |

31004:Token 无效。
处理方案:从 APP 服务器获取新的 token ,再调用 connect 接口进行连接。

31010:用户连接成功后被踢下线。
处理法案:退回到登录页面,给用户提示被踢掉线。

31023:用户连接过程中又在其它设备上登录,导致当前设备被踢。
处理方案:退回到登录页面,给用户提示其他设备登录了当前账号。

31011:用户被封禁。
处理方案:退回到登录页面,给用户提示被封禁。

34006:自动重连超时(发生在 timeLimit 为有效值并且网络极差的情况下)。
处理方案:重新调用 connect 接口进行连接。

31008:Appkey 被封禁。
处理方案:请检查您使用的 AppKey 是否被封禁或已删除。

33001:SDK 没有初始化。
处理方案:在使用 SDK 任何功能之前,必须先 Init。

33003:开发者接口调用时传入的参数错误。
处理方案:请检查接口调用时传入的参数类型和值。

33002:数据库错误。
处理方案:检查用户 userId 是否包含特殊字符,SDK userId 支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式,最大长度 64 字节。
已复制
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

文档是否解决您的问题 ?

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