IMLib 2.X 升级到 5.X
本文描述 IMLib SDK 从 2.X 到 5.X 版本的升级步骤。
接口变更说明
连接接口发生了变更,新版连接接口有如下两个:
连接接口 1
Objective C
- (void)connectWithToken:(NSString *)token
dbOpened:(void (^)(RCDBErrorCode code))dbOpenedBlock
success:(void (^)(NSString *userId))successBlock
error:(void (^)(RCConnectErrorCode status))errorBlock
用户调用接口之后,如果因为网络原因暂时连接不上,SDK 会一直尝试重连,直到连接成功或者出现 SDK 无法处理的错误(如 token 非法,用户封禁等)。
连接接口 2
Objective C
- (void)connectWithToken:(NSString *)token
timeLimit:(int)timeLimit
dbOpened:(void (^)(RCDBErrorCode code))dbOpenedBlock
success:(void (^)(NSString *userId))successBlock
error:(void (^)(RCConnectErrorCode status))errorBlock
用户调用接口之后,SDK 会在 timeLimit 秒内尝试连接,超过时间将会返回超时并停止连接,timeLimit 小于等于 0 行为和没有 timeLimit 的接口一样。
错误回调处理
新增的连接接口,可自行重连的中间错误码将不再触发 onError 回调(如旧版的 RC_NET_CHANNEL_INVALID 等),只有发生 SDK 无法处理的错误才会触发 onError 回调。
跟旧版的另外一个区别是,onError 回调触发后,4.0.0 将不再重连。而旧版 SDK 在出现可自行重连的中间错误码触发 onError 回调后,还会进行自动重连。
连接错误信息
31004:Token 无效。
处理方案:从 APP 服务器获取新的 token ,再调用 connect 接口进行连接。
31010: 用户被踢下线。
处理法案:退回到登录页面,给用户提示被踢掉线。
31023:用户在其它设备上登录。
处理方案:退回到登录页面,给用户提示其他设备登录了当前账号。
31009:用户被封禁。
处理方案:退回到登录页面,给用户提示被封禁。
34006:自动重连超时(发生在 timeLimit 为有效值并且网络极差的情况下)。
处理方案:重新调用 connect 接口进行连接。
31008:Appkey 被封禁。
处理方案:请检查您使用的 AppKey 是否被封禁或已删除。
33001:SDK 没有初始化。
处理方案:在使用 SDK 任何功能之前,必须先 Init。
33003:开发者接口调用时传入的参数错误。
处理方案:请检查接口调用时传入的参数类型和值。
33002:数据库错误。
处理方案:检查用户 userId 是否包含特殊字符,SDK userId支持大小写英文字母与数字的组合,最大长度 64 字节。
连接错误解决方案
- error 回调中判断是否是 token 非法和连接超时。
- 连接状态回调中判断是否是连接状态是否是 token 非法、踢掉线、封禁、自动重连超时等情况,并按照上述处理方案处理。
Objective C
//1.连接处理
[[RCIMClient sharedRCIMClient] connectWithToken:newToken
dbOpened:^(RCDBErrorCode code) {
//消息数据库打开,可以进入到主页面
}
success:^(NSString *userId) {
//连接成功
}
error:^(RCConnectErrorCode status) {
if (status == RC_CONN_TOKEN_INCORRECT) {
//从 APP 服务获取新 token,并重连
} else {
//无法连接到 IM 服务器,请根据相应的错误码作出对应处理
}
}]
//或者
[[RCIMClient sharedRCIMClient] connectWithToken: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 服务器,请根据相应的错误码作出对应处理
}
}]
由静态库修改为动态库
5.0.0 相较于旧版本,SDK 从静态库修改为动态库。
5.1.1 动态库改为 XCFramework 形式。 Cocoapod 版本最低为 1.10.0 ,否则可能会无法加载 SDK 或者报 ld: framework not found RandomNames.xcframework