IMKit 2.X 升级到 5.X
本文描述 IMKit SDK 从 2.X 到 5.X 版本的升级步骤。
升级概述
从 2.x IMKit 升级到 5.x 版本,涉及到以下相关内容的变更,如果没用到以下内容可以平滑升级:
- RCIM
- RCMessageCell
- RCChatSessionInputBarControl
- RCPluginBoardView
- 会话设置页删除:RCSettingViewController 和RCConversationSettingTableViewController
- RCImagePreviewController
- RCKitUtility
- 资源图片变动
- 消息气泡拉伸比例修改
- 音视频资源图片迁移
- 注册自定义消息 cell 时机
以下是详细的升级说明。
1. RCIM 的接口
1.1 配置属性调用类变更
Objective C
/// RCIM 的废弃接口,配置已被移动到 RCKitConfig 类中
@interface RCIM (Deprecated)
@property (nonatomic, assign) BOOL disableMessageNotificaiton __deprecated_msg("已废弃,请使用 RCKitConfigCenter.message.disableMessageNotificaiton");
@property (nonatomic, assign) BOOL disableMessageAlertSound __deprecated_msg("已废弃,请使用 RCKitConfigCenter.message.disableMessageAlertSound");
@property (nonatomic, assign) BOOL enableTypingStatus __deprecated_msg("已废弃,请使用 RCKitConfigCenter.message.enableTypingStatus");
@property (nonatomic, copy) NSArray *enabledReadReceiptConversationTypeList __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enabledReadReceiptConversationTypeList,设置开启回执的会话类型。");
@property (nonatomic, assign) NSUInteger maxReadRequestDuration __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.maxReadRequestDuration");
@property (nonatomic, assign) BOOL enableSyncReadStatus __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableSyncReadStatus");
@property (nonatomic, assign) BOOL enableMessageMentioned __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableMessageMentioned");
@property (nonatomic, assign) BOOL enableMessageRecall __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableMessageRecall");
@property (nonatomic, assign) NSUInteger maxRecallDuration __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.maxRecallDuration");
@property (nonatomic, assign) BOOL showUnkownMessage __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.showUnkownMessage");
@property (nonatomic, assign) BOOL showUnkownMessageNotificaiton __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.showUnkownMessageNotificaiton");
@property (nonatomic, assign) NSUInteger maxVoiceDuration __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.maxVoiceDuration");
@property (nonatomic, assign) BOOL isExclusiveSoundPlayer __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.isExclusiveSoundPlayer");
@property (nonatomic, assign) BOOL isMediaSelectorContainVideo __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.isMediaSelectorContainVideo");
@property (nonatomic, assign) NSInteger GIFMsgAutoDownloadSize __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.GIFMsgAutoDownloadSize");
@property (nonatomic, assign) BOOL enableSendCombineMessage __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableSendCombineMessage");
@property (nonatomic, assign) BOOL enableBurnMessage __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableDestructMessage");
@property (nonatomic, assign) NSUInteger reeditDuration __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.reeditDuration");
@property (nonatomic, assign) BOOL enableMessageReference __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.enableMessageReference");
@property (nonatomic, assign) NSUInteger sightRecordMaxDuration __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.message.sightRecordMaxDuration");
@property (nonatomic, strong) UIColor *globalNavigationBarTintColor __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.globalNavigationBarTintColor");
@property (nonatomic, assign) RCUserAvatarStyle globalConversationAvatarStyle __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.globalConversationAvatarStyle");
@property (nonatomic, assign) CGSize globalConversationPortraitSize __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.globalConversationPortraitSize");
@property (nonatomic, assign) RCUserAvatarStyle globalMessageAvatarStyle __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.globalMessageAvatarStyle");
@property (nonatomic, assign) CGSize globalMessagePortraitSize __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.globalMessagePortraitSize");
@property (nonatomic, assign) CGFloat portraitImageViewCornerRadius __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.portraitImageViewCornerRadius");
@property (nonatomic, assign) BOOL enableDarkMode __deprecated_msg(
"已废弃,请使用 RCKitConfigCenter.ui.enableDarkMode");
@end
1.2 连接接口变更
从 2.x 版本升级到 5.x, 关键适配点是删除连接接口 token 非法的回调,并将该回调中的处理逻辑,移动至 error 回调中,代码示例如下:
Objective C
//1.连接处理
//用户调用接口之后,如果因为网络原因暂时连接不上,SDK 会一直尝试重连,直到连接成功或者出现 SDK 无法处理的错误(如 token 非法,用户封禁等)
[[RCIM sharedRCIM] connectWithToken:newToken
dbOpened:^(RCDBErrorCode code) {
//消息数据库打开,可以进入到主页面
}
success:^(NSString *userId) {
//连接成功
}
error:^(RCConnectErrorCode status) {
if (status == RC_CONN_TOKEN_INCORRECT) {
//从 APP 服务获取新 token,并重连
} else {
//无法连接到 IM 服务器,请根据相应的错误码作出对应处理
}
}]
//或者
//用户调用接口之后,SDK 会在 timeLimit 秒内尝试连接,超过时间将会返回超时并停止连接,timeLimit <= 0 行为和没有 timeLimit 的接口一样
[[RCIM sharedRCIM] 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 服务器,请根据相应的错误码作出对应处理
}
}]
//2.连接状态监听设置
//其中 self 最好为单例类(如 AppDelegate),以此保证在整个 APP 生命周期,该类都能够检测到 SDK 连接状态的变更
[[RCIM sharedRCIM] addConnectionStatusDelegate:self];
- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
if (status == ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT) {
//当前用户账号在其他端登录,请提示用户并做出对应处理
} else if (status == ConnectionStatus_DISCONN_EXCEPTION) {
//用户被封禁,请提示用户并做出对应处理
}
}
注意
新增的连接接口,可自行重连的中间错误码将不再触发 onError 回调(如旧版的 RC_NET_CHANNEL_INVALID 等),只有发生 SDK 无法处理的错误才会触发 onError 回调。 跟旧版的另外一个区别是,onError 回调触发后,4.0.0 及之后版本将不再重连。而旧版 SDK 在出现可自行重连的中间错误码触发 onError 回调后,还会进行自动重连。