全部文档

更新时间: 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) 连接失败的错误码

代码示例:

[[RCIM sharedRCIM] 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) 连接失败的错误码

代码示例:

[[RCIM sharedRCIM] 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 不会再进行重连,具体的错误信息请参见文末。

RC_CONN_TOKEN_INCORRECT 的说明:

可能原因 排查方案
token 错误 检查客户端初始化使用的 AppKey 和您服务器获取 Token 使用的 AppKey 是否一致。
token 过期 检查是否在 开发者后台 (opens new window) 设置了 Token 过期时间。过期之后需要请求您的服务器重新获取 Token 并再次用新的 Token 建立连接
  1. RC_CONN_TOKEN_INCORRECT 的情况下,您需要请求您的服务器重新获取 Token 并建立连接,但是注意避免无限循环,以免影响 App 用户体验。

  2. 此方法的回调线程并非为原调用线程,需要进行 UI 操作时请注意切换到主线程。

# 接口调用建议

用户初次登录

APP 在用户点击登录时连接融云,建议使用带 timeLimit 的接口。这样在初次登录时如果遇到网络问题,SDK 可以及时回调连接超时,由 APP 对用户进行提醒,请用户在网络正常的时候再重新登录。

用户免密登录:

用户登录过一次之后,很多 APP 都会提供免密登录的功能。用户免密登录时,可以使用不带 timeLimit 的接口。这样即使网络异常,SDK 也会自动重连,并在重连成功之后返回成功回调。

# 设置连接监听

代码示例

//其中 self 最好为单例类(如 AppDelegate),以此保证在整个 APP 生命周期,该类都能够接收到 SDK 连接状态的变更。
[[RCIM sharedRCIM] 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

# 连接错误码

错误码 说明 处理方案
31004 Token 无效 从 APP 服务器获取新的 token ,再调用 connect 接口进行连接
31010 用户连接成功后被踢下线 退回到登录页面,给用户提示被踢掉线
31023 用户连接过程中又在其它设备上登录,导致当前设备被踢 退回到登录页面,给用户提示其他设备登录了当前账号
31011 用户被封禁 退回到登录页面,给用户提示被封禁
34006 自动重连超时(发生在 timeLimit 为有效值并且网络极差的情况下) 重新调用 connect 接口进行连接
31008 Appkey 被封禁 请检查您使用的 AppKey 是否被封禁或已删除
33001 SDK 没有初始化 在使用 SDK 任何功能之前,必须先 Init
33003 开发者接口调用时传入的参数错误 请检查接口调用时传入的参数类型和值
33002 数据库错误 检查用户 userId 是否包含特殊字符,SDK userId 支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式,最大长度 64 字节

文档是否解决您的问题 ?

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