版本区分

更新时间: 2025/01/09 16:32:15

网易云信即时通讯界面组件(简称 IM UIKit)是基于 NIM SDK(网易云信 IM SDK) 开发的一款即时通讯 UI 组件库,包括聊天、会话、圈组、搜索、通讯录、群管理等组件。

本文介绍安卓端和 iOS 端 9.x.x 系列版本和 10.x.x 系列版本 IM UIKit 之间的使用区别,适用于从 0.x.x~9.x.x 系列版本 IM UIKit 升级至 10.x.x 系列版本 IM UIKit 的开发者。

版本说明

10.x.x 系列版本 UIKit 在底层模块进行了比较大的升级,造成与 9.x.x 系列版本 UIKit 之间的接口变更。同时,10.x.x 系列版本 UIKit 对定制接口也进行了简单的调整。

  • IM UIKit 版本号为 0.x.x~9.x.x 都概指 V9 系列版本。底层依赖 0.x.x~9.x.x 系列版本 NIM SDK。

  • IM UIKit 版本号为 10.x.x 都代表 V10 系列版本。底层依赖 10.x.x 系列版本 NIM SDK。

    两个系列 UIKit 的最新版本号,请参考对应开发平台 更新日志

变更总览

IM UIKit V9 系列版本和 V10 系列版本组件以及相关依赖仓库变更如下表所示:

组件库 V9 V10 安卓 V10 iOS 变更说明
聊天 chatkit-ui chatkit-ui NEChatUIKit 变化大。接口变更造成 UI 层改动较大。
通讯录 contacttkit-ui contacttkit-ui NEContactUIKit
会话列表 conversationkit-ui conversationkit-ui NEConversationUIKit
群管理 teamkit-ui teamkit-ui NETeamUIKit
AI 数字人 - aisearchkit NEAISearchKit 新增。提供 AI 数字人功能。
组件通用库 common-ui common-ui NECommonUIKit 变化小。除新增功能无变化。
common common NECommonKit
底层框架库 corekit corekit NECoreKit 无变化
组件逻辑库 chatkit chatkit NEChatKit 变化大。基于 10.x.x NIM SDK 重新开发,同时将部分原 corekit 能力迁移到该库中。
底层封装 NIM SDK 接口库 corekit-im corekit-im2 NECoreIM2Kit 变化大。NIM SDK 0.x.x~9.x.x 到 10.x.x 版本差异较大,所以新建该仓库,用于区分 0.x.x~9.x.x 接口库。
插件底层库 - corekit-plugin - 新增。插件底层库,服务于 aisearchkit AI 数字人。

corekit-im 库变更

迁移 Repo 代码

将原 0.x.x~9.x.x corekit-im 中的 Repo 相关接口迁移到 10.x.x 的 chatKit 中:

corekit 类 chatkit 类 说明
MiscRepo MiscRepo 类迁移,接口保持不变。
CommonRepo ContactRepo
  • getUserInfo > getUserInfo
  • updateUserInfo > updateSelfUserProfile
- ResourceRepo 文件上传下载相关接口,迁移到 ResourceRepo。
SettingRepo SettingRepo 0.x.x~9.x.x 系列版本的 SettingRepo 中与 alias 相关的接口被移除,例如 getDeleteWithAliassetDeleteWithAlias,10.x.x 系列版本中不再使用该功能。

迁移到 corekit-im2

Android

将引用 corekit-im 的库迁移到了 corekit-im2 库中。将包名 com.netease.yunxin.kit.corekit.im.* 改为 com.netease.yunxin.kit.corekit.im2.*。例如,在 IMKIt-sample 中,Java 文件 IMApplication 的引用如下:

Java//0.x.x~9.x.x 引用
import com.netease.yunxin.kit.corekit.im.IMKitClient;
import com.netease.yunxin.kit.corekit.im.repo.SettingRepo;
import com.netease.yunxin.kit.corekit.im.utils.IMKitUtils;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
//10.x.x 引用
import com.netease.yunxin.kit.chatkit.repo.SettingRepo;
import com.netease.yunxin.kit.corekit.im2.IMKitClient;
import com.netease.yunxin.kit.corekit.im2.utils.IMKitUtils;
import com.netease.yunxin.kit.corekit.im2.utils.RouterConstant;
iOS

将引用 NECoreIMKit 的库迁移到了 NECoreIM2Kit 库中。

Swift//0.x.x~9.x.x 引用
import NECoreIMKit
//10.x.x 引用
import NECoreIM2Kit

接口及参数变更

由于底层 SDK 或者业务优化原因,对接口参数进行了部分调整,如果遇到参数变更,您需要重新调整。

以下列举初始化接口、登录接口、FetchCallback 接口的变更规律。其他接口的变更,基本采用此类规律。您可以按照此类方式找到新的类,或者对已有接口参照 IDE 提示进行参数调整。对新接口参数有疑问,请参考 10.x.x 接口文档 调整。

  • 初始化接口变更:0.x.x~9.x.x init 接口支持免登录初始化,但是在 10.x.x 中不支持登录,请在初始化后,主动进行接口登录调用。

    Android
    Java//0.x.x~9.x.x 初始化
    init(context: Context, loginInfo: LoginInfo?, appKey: String?)
    
    //10.x.x 初始化
    init(context: Context, appKey: String?)
    
    iOS
    Swift//0.x.x~9.x.x 初始化
    public func setupCoreKitIM(_ option: NIMSDKOption)
    
    //10.x.x 初始化
    open func setupIM(_ option: NIMSDKOption)
    
  • 登录接口变更:接口参数因为 NIM SDK 的调整,UIKit 进行了调整。

    Android
    Java// 0.x.x~9.x.x 登录
    loginIM(info: LoginInfo, callback: LoginCallback<LoginInfo>?)
    
    //10.x.x 登录
    login(
        account: String, token: String, option: V2NIMLoginOption?,
        callback:
        FetchCallback<Void>?
    )
    
    iOS
    Swift// 0.x.x~9.x.x 登录
    public func loginIM(_ account: String,
                        _ token: String,
                        _ block: @escaping (Error?) -> Void)
    public func loginIM(account: String,
                        token: String,
                        authType: Int32,
                        loginExt: String,
                        _ block: @escaping (Error?) -> Void)
    
    //10.x.x 登录
    open func login(_ accountId: String,
                    _ token: String?,
                    _ option: V2NIMLoginOption?,
                    _ completion: @escaping (NSError?) -> Void)
    
  • Fetchback 调整

    Android

    大部分需要异步回调的接口,回调都采用 FetchCallback 类,该接口的包以及接口进行了调整。

    包调整:

    • 0.x.x~9.x.x:com.netease.yunxin.kit.corekit.im2.extend.FetchCallback

    • 10.x.x:com.netease.yunxin.kit.corekit.im.provider.FetchCallback

    Java// 0.x.x~9.x.x:com.netease.yunxin.kit.corekit.im2.extend.FetchCallback
    // 0.x.x~9.x.x FetchCallback 接口方法
    new FetchCallback<Long>() {
    @Override public void onSuccess(@Nullable Long param) {
    }
    
    @Override public void onFailed(int code) {}
    
    @Override public void onException(@Nullable Throwable exception) {}
    });
    
    //10.x.x:com.netease.yunxin.kit.corekit.im.provider.FetchCallback
    //10.x.x FetchCallback 接口方法
    new FetchCallback<Long>() {
    
        @Override    public void onSuccess(@Nullable Long aLong) {
    
        }
    
        @Override    public void onError(int i, @Nullable String s) {
    
        }
    }
    

chatkit 库变更

ChatKit 为 IM UIKit 组件的底层库,数据获取、变更以及监听都通过 Chatkit 中的库提供的类和接口。由于 10.x.x NIM SDK 的重新设计,所以 10.x.x 系列 UIKit 的 Chatkit 与 NIM 相关的接口(ChatRepoContactRepoConversationRepoTeamRepo 等)无论接口名称和参数都与 0.x.x~9.x.x 有差异。如果在您的工程中使用到这些接口,请参考 IM UIKit 接口层文档(Android | iOS),切换到您需要的接口中。

ChatKit 的变更说明如下:

  • Repo 层接口变更:10.x.x 中采用与 SDK 相同的命名接口,并且参数中保持与 SDK 参数类型一致。

  • 监听相关变更:不再使用 0.x.x~9.x.x 中 Observer(安卓)和 Delegate(iOS),10.x.x 采用 addLisenerremoveListener 接口分别添加和移除监听,接口都在对应的 Repo 中。

  • 其他工具类或者 Kit 层能力:基本都保持不变,只进行了部分优化和微调。

定制接口变更

组件定制接口变更情况如下所示:

Android

chatkit-ui 组件

  1. 消息 Item 单击事件。

    撤回消息接口名称修改,接口名称 onReEditRevokeMessage 变更为 onReeditRevokeMessage

    JavaChatUIConfig chatUIConfig = new ChatUIConfig();
    chatUIConfig.messageItemClickListener =
        new IMessageItemClickListener() {
            @Override
            public boolean onReeditRevokeMessage(
                    View view,
                    int position,
                    ChatMessageBean messageInfo
            ) {
            ....
            }
        };
    ChatKitClient.setChatUIConfig(chatUIConfig);
    
  2. 消息长按菜单定制接口变更。

    IChatPopMenu 接口中 customizePopMenu 方法入参和返回值变更,由 List<ChatPopMenuAction> 变更为 List<PluginAction>

    • 0.x.x~9.x.x 接口:

      JavachatUIConfig.chatPopMenu =
          new IChatPopMenu() {
              @NonNull
              @Override
              public List<ChatPopMenuAction> customizePopMenu(
                  List<ChatPopMenuAction> menuList, ChatMessageBean messageBean) {
                  // 修改菜单列表的内容或者行为
                  return menuList;
              }
      
              @Override
              public boolean showDefaultPopMenu() {
              return true;
              }
          };
      
    • 10.x.x 接口:

      JavachatUIConfig.chatPopMenu =
          new IChatPopMenu() {
              @NonNull
              @Override
              public List<PluginAction> customizePopMenu(
                  List<PluginAction> menuList, ChatMessageBean messageBean) {
                  // 修改菜单列表的内容或者行为
                  return menuList;
              }
      
              @Override
              public boolean showDefaultPopMenu() {
              return true;
              }
          };
      

CoversationKit-ui 组件

  1. 会话列表外漏消息内容定制:主要在接口方法 customContentText 的参数由 ConversationInfo > V2NIMConversation

    • 0.x.x~9.x.x 接口:

      JavaconversationUIConfig.conversationCustom = new ConversationCustom(){
              @Override
              public String customContentText(Context context, ConversationInfo conversationInfo){
                  // converstaionInfo 会话信息,包含会话和最近消息内容
                  return "";//返回您想展示的内容
              }
          };
      
    • 10.x.x 接口:

      JavaconversationUIConfig.conversationCustom = new ConversationCustom(){
              @Override
              public String customContentText(Context context, V2NIMConversation conversationInfo){
                  // converstaionInfo 会话信息,包含会话和最近消息内容
                  return "";//返回您想展示的内容
              }
          };
      
  2. 会话列表 Item 定制接口

    IConversationFactory 提供定制将最近会话列表数据,转换为 Android Recycler Adapter 的加载数据。其中创建 Adapter 数据的方法 CreateBean 参数变更 ConversationInfo > V2NIMConversation

    • 0.x.x~9.x.x IConversationFactory 接口定义:

      Javapublic interface IConversationFactory {
      //根据会话数据,创建 ViewHolder 中数据类
      ConversationBean CreateBean(ConversationInfo info);
      
      //Adapter 获取数据对应的 ViewType
      int getItemViewType(ConversationBean data);
      
      //创建 ViewHolder
      BaseViewHolder<ConversationBean> createViewHolder(@NonNull ViewGroup parent, int viewType);
      }
      
    • 10.x.x IConversationFactory 接口定义:

      Javapublic interface IConversationFactory {
          //根据会话数据,创建 ViewHolder 中数据类
          ConversationBean CreateBean(V2NIMConversation var1);
          //Adapter 获取数据对应的 ViewType
          int getItemViewType(ConversationBean var1);
          //创建 ViewHolder
          BaseViewHolder<ConversationBean> createViewHolder(@NonNull ViewGroup var1, int var2);
      }
      
iOS

类名变更

  • 自定义示例代码,见 CustomConfig

  • 消息模块自定义配置类改为 ChatUIConfig

  • 会话模块自定义配置类改为 ConversationUIConfig

  • 通讯录模块自定义配置类改为 ContactUIConfig

例如更改头像方圆类型:

  • 0.x.x~9.x.x:

    SwiftNEKitChatConfig.shared.ui.messageProperties.avatarType = .rectangle
    NEKitConversationConfig.shared.ui.conversationProperties.avatarCornerRadius = 4.0
    NEKitContactConfig.shared.ui.contactProperties.avatarCornerRadius = 4.0
    
  • 10.x.x:

    SwiftChatUIConfig.shared.messageProperties.avatarType = .cycle
    ConversationUIConfig.shared.conversationProperties.avatarCornerRadius = 4.0
    ContactUIConfig.shared.contactProperties.avatarCornerRadius = 4.0
    

配置项变更

  • 支持发送的视频、文件大小限制移至 ChatUIConfig

  • 群未读显示限制数移至 ChatUIConfig

  • 0.x.x~9.x.x:

    Swift// 发送视频、文件大小限制(单位:MB)
    NEKitChatConfig.shared.ui.fileSizeLimit
    // 群未读显示限制数,默认超过 200 人不显示已读未读进度
    NEKitChatConfig.shared.maxReadingNum = 200
    
  • 10.x.x:

    Swift// 发送视频、文件大小限制(单位:MB)
    ChatUIConfig.shared.fileSizeLimit = 200
    // 群未读显示限制数,默认超过 200 人不显示已读未读进度
    ChatUIConfig.shared.maxReadingNum = 200
    

回调参数变更

回调参数中新增当前页面的 ViewController。例如消息长按弹出菜单单击事件回调。

  • 0.x.x~9.x.x:

    Swiftpublic var popMenuClick: ((OperationItem) -> Void)?
    
  • 10.x.x:

    Swiftpublic var popMenuClick: ((ChatViewController, OperationItem) -> Void)?
    

其他变更

有关安卓端和 iOS 端 9.x.x 系列版本和 10.x.x 系列版本 IM UIKit 依赖的 IM SDK 的版本差异,请参考 SDK 版本区别

此文档是否对你有帮助?
有帮助
去反馈
  • 版本说明
  • 变更总览
  • corekit-im 库变更
  • 迁移 Repo 代码
  • 迁移到 corekit-im2
  • 接口及参数变更
  • chatkit 库变更
  • 定制接口变更
  • chatkit-ui 组件
  • CoversationKit-ui 组件
  • 类名变更
  • 配置项变更
  • 回调参数变更
  • 其他变更