集成会话列表界面

更新时间: 2025/09/11 14:15:56

网易云信 IM UIKit 支持本地会话组件(NELocalConversationUIKit)和云端会话组件(NEConversationUIKit),在其他组件中需要根据您当前使用到的会话列表组件来进行对应的功能。

IM UIKit 提供两种方式使用会话列表界面。

  • 直接使用 ConversationController/LocalConversationController 构建默认的 UI 界面。
  • 继承 ConversationController/LocalConversationController 实现自定义 UI 界面。
  • ConversationController 为包含导航栏的云端会话类;LocalConversationController 为包含导航栏的本地会话类。
  • 会话列表界面 UI 个性化定制的的相关说明,请参考 自定义会话列表界面 UI

效果展示

会话列表是即时通讯应用中的一个重要功能模块,用于展示用户的所有聊天对话列表,包括单聊和群聊。它帮助用户快速找到和切换不同的聊天对象或群组,方便管理和查看历史消息记录。效果如下图所示:

前提条件

根据本文操作前,请确保您已经完成以下操作:

  • 实现 登录

  • 明确使用本地会话还是云端会话。如果需要使用云端会话,需要您在使用云端会话列表组件之前,打开该功能开关,在您完成初始化之后,需要在相应代码设置。

    • 初始时打开云端会话开关

      Swift
      Swift// 设置 IM SDK V2 的配置项,包括是否使用旧的登录接口和是否使用云端会话
      let v2Option = V2NIMSDKOption()
      v2Option.enableV2CloudConversation = true
      
      Objective-C
      Objective-C// 设置 IM SDK V2 的配置项,包括是否使用旧的登录接口和是否使用云端会话
      V2NIMSDKOption *v2Option = [[V2NIMSDKOption alloc] init];
      v2Option.enableV2CloudConversation = YES;
      
    • 示例代码

      Swift
      Swiftclass AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
          // 设置IM SDK的配置项,包括AppKey,推送配置和一些全局配置等
          let option = NIMSDKOption()
          option.appKey = "your app key"
          option.apnsCername = "网易云信控制台配置的 APNS 推送证书名称"
          option.pkCername = "网易云信控制台配置的 PushKit 推送证书名称"
      
          // 设置IM SDK V2的配置项,包括是否使用旧的登录接口和是否使用云端会话
          let v2Option = V2NIMSDKOption()
          v2Option.enableV2CloudConversation = true
      
          // 初始化IM UIKit,初始化Kit层和IM SDK,将配置信息透传给IM SDK。无需再次初始化IM SDK
          IMKitClient.instance.setupIM2(option, v2Option)
      }
      
      Objective-C
      Objective-C// 设置IM SDK的配置项,包括AppKey,推送配置和一些全局配置等
      NIMSDKOption *option = [NIMSDKOption optionWithAppKey:AppKey];
      
      // 设置IM SDK V2的配置项,包括是否使用旧的登录接口和是否使用云端会话
      V2NIMSDKOption *v2Option = [[V2NIMSDKOption alloc] init];
      v2Option.enableV2CloudConversation = YES;
      
      // 初始化IM UIKit,初始化Kit层和IM SDK,将配置信息透传给IM SDK。无需再次初始化IM SDK
      [IMKitClient.instance setupIM2:option :v2Option];
      

方法原型

本地会话

Swift:

Swiftlet conversationVC = LocalConversationController()
self.navigationController?.pushViewController(conversationVC, animated: true)

Objective-C:

Objective-CLocalConversationController *conversationVC = [[LocalConversationController alloc] init];
[self.navigationController pushViewController:conversationVC animated:YES];
云端会话

Swift:

Swiftlet conversationVC = ConversationController()
self.navigationController?.pushViewController(conversationVC, animated: true)

Objective-C:

Objective-CConversationController *conversationVC = [[ConversationController alloc] init];
[self.navigationController pushViewController:conversationVC animated:YES];

直接使用默认的会话列表界面

本地会话

Swift:

Swiftlet conversationVC = LocalConversationController()
let conversationNav = NENavigationController(rootViewController: conversationVC)

Objective-C:

Objective-CLocalConversationController *conversationVC = [[LocalConversationController alloc] init];
UINavigationController *conversationNav = [[UINavigationController alloc] initWithRootViewController:conversationVC];
云端会话

Swift:

Swiftlet conversationVC = ConversationController()
let conversationNav = NENavigationController(rootViewController: conversationVC)

Objective-C:

Objective-CConversationController *conversationVC = [[ConversationController alloc] init];
UINavigationController *conversationNav = [[UINavigationController alloc] initWithRootViewController:conversationVC];

继承实现自定义的会话列表界面

本地会话

Swift:

Swiftopen class CustomLocalConversationController: LocalConversationController, NEBaseLocalConversationControllerDelegate {
    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        delegate = self
        ...
    }

    public required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}
云端会话

Swift:

Swiftopen class CustomConversationController: ConversationController, NEBaseConversationControllerDelegate {
    override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        delegate = self
        ...
    }

    public required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}
此文档是否对你有帮助?
有帮助
去反馈
  • 效果展示
  • 前提条件
  • 方法原型
  • 直接使用默认的会话列表界面
  • 继承实现自定义的会话列表界面