快速集成 IM UIKit
更新时间: 2023/03/13 10:59:40
云信 IM UIKit 是基于 NIM SDK(网易云信 IM SDK)开发的一款即时通讯 UI 组件库,包括聊天、会话列表、通讯录、群管理等组件本文介绍如何快速跑通 IM UIKit 的集成流程。
前提条件
在开始集成 IM UIKit 前,请确保:
-
在云信控制台完成以下操作。
创建应用并获取 App Key 和 App Secret
1. 在左侧导航栏中找到“应用”,并单击“创建”。
2. 填写应用的基本信息后,单击“创建”。
3. 创建应用后,可以在左侧导航栏中查看该应用,并单击 “App Key 管理”,并获取 App Key 和 App Secret。注册云信 IM 账号,获取 accid 和 token
注册云信 IM 账号,获取 accid 和 token。accid 和 token 将用于登录云信服务端。
1. 在左侧导航栏中单击指定应用名称,进入该应用的详情页面。
2. 在“功能管理”中单击“账号管理”。
3. 在测试页面,单击“新建账号”,并填写账号(即accid)、昵称(即 name)、密码(即 Token)后,单击“确定”。 -
您已获取示例项目。
-
您已准备如下开发环境/工具:
- iOS 9.0.0 及以上版本
- Xcode 13
实现流程
步骤1:按需导入组件
-
根据业务需要,在 “Podfile” 文件中,以添加依赖的形式添加相应的 IM UIKit 组件。
例如,需要会话列表和通讯录功能,可添加
pod 'NEConversationUIKit'
和pod 'NEContactUIKit'
。导入 UI 组件时,需要指定相同版本的基础 Kit 库引入,否则可能导致后续出现报错。具体可参见下文的常见问题排查。
# Uncomment the next line to define a global platform for your project platform :ios, '9.0' target 'your project name' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # UI组件 pod 'NEContactUIKit', '9.4.0' //通讯录组件 pod 'NEConversationUIKit', '9.4.0' //会话列表组件 pod 'NEChatUIKit', '9.4.0' //会话(聊天)组件 pod 'NETeamUIKit', '9.4.0' //群相关设置组件 pod 'NERtcCallUIKit', '1.8.2'//呼叫组件 # Kit组件(和UI组件对应) pod 'NEContactKit', '9.4.0' pod 'NEQChatKit', '9.4.0' pod 'NEConversationKit', '9.4.0' pod 'NEChatKit', '9.4.0' pod 'NETeamKit', '9.4.0' pod 'NERtcCallKit', '1.8.2' # 基础Kit库 pod 'NECommonUIKit', '9.4.0' pod 'NECommonKit', '9.4.0' pod 'NECoreIMKit', '9.4.0' pod 'NECoreKit', '9.4.0' # 扩展库 pod 'NEMapKit', '9.4.0' //地理位置组件 pod 'NERtcSDK', '4.6.29'//RTC音视频组件 end
- 各 UI 组件相互独立,添加或删除均不影响项目编译。
- 示例代码中的 9.4.0 为版本号,仅用于示例。建议使用最新版本。
-
配置完 “Podfile” 文件后执行
pod install
命令导入组件。
更多组件导入信息,请参见组件导入。
步骤2:初始化
在应用启动后,调用 setupCoreKitIM
方法进行初始化。
option 参数 |
是否必传 | 说明 |
---|---|---|
appKey |
是 | 云信控制台获取到的 App Key |
apnsCername |
否 | APNs 推送证书名,如不需要实现离线推送可不配置 |
pkCername |
否 | PushKit 推送证书名,如不需要实现离线推送可不配置 |
示例代码:
let option = NIMSDKOption()
option.appKey = "your app key"
option.apnsCername = "云信控制台配置的 APNS 推送证书名称"
option.pkCername = "云信控制台配置的 PushKit 推送证书名称"
IMKitClient.instance.setupCoreKitIM(option)
更多初始化说明,请参见初始化。
步骤3:登录
在完成初始化后,调用 loginIM
方法登录 IM。
IMKitClient.instance.loginIM(accid, token) { error in
if let err = error {
print("NEKitCore login error : ", err)
}else {
//在登录成功回调中初始化路由以及配置各个模块首页
/*
weakSelf?.setupTabbar()
*/
}
}
调用登录的方法时,将示例代码中的 accid
和 token
分别替换为您的云信账号 ID (即 accid)和 Token。
步骤4:初始化路由
如果未在登录成功回调中初始化路由,需要单独初始化路由,才能进行后续的界面搭建。在初始化路由时可同时初始化地图 Map,初始化后,您的应用即可实现地理位置消息功能。具体请参见实现地理位置消息功能。
func loadService() {
//初始化路由
ContactRouter.register()
ChatRouter.register()
TeamRouter.register()
ConversationRouter.register()
//注册个人设置页面,用于实现单击头像后跳转至个人设置页面功能
Router.shared.register(MeSettingRouter) { param in
if let nav = param["nav"] as? UINavigationController {
let me = PersonInfoViewController()
nav.pushViewController(me, animated: true)
}
}
//地图map初始化
NEMapClient.shared().setupMapClient(withAppkey: AppKey.gaodeMapAppkey)
}
若需要注册个人设置页面,实现单击头像后跳转至个人设置页面的功能,首先需要在 XCode 中拖入相关的源码文件至您的工程。相关的源码文件包括:
步骤5:界面搭建
以搭建单聊群聊页面为例,示例代码如下(更多详情请参见下文的界面集成详情):
func chatExample(){
let session = NIMSession("accid", type: .P2P)
let p2pChatVC = P2PChatViewController(session: session)
let teamSession = NIMSession("team id", type: .team)
let groupVC = GroupChatViewController(session: teamSession, anchor: nil)
}
参数说明:
参数 | 说明 |
---|---|
accid |
网易云信账号ID,可调用注册云信 IM 账号 API 创建 |
type |
聊天类型,.P2P -单聊,.team -群聊 |
界面效果参考如下:

后续步骤
为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的测试用 IM 账号 和 token,请确保在后续的正式生产环境中,将其替换为通过 IM 服务端 API 生成的正式 IM 账号(accid)和 token。
相关参考
界面集成详情
IM UIKit 中提供的常用业务场景界面及相关相信集成说明如下:
页面 | 所属组件 | 描述 |
---|---|---|
ConversationController |
NEConversationUIKit | 会话列表页面(创建或者跳转到该界面需要传入参数,详见集成会话列表界面) 修改界面 UI 请参见自定义会话列表 UI |
ContactsViewController |
NEContactUIKit | 通讯录页面(创建或者跳转到该界面需要传入参数,详见集成通讯录界面) 修改界面 UI 请参见自定义通讯录 UI |
P2PChatViewController |
NEChatUIKit | 单聊会话页面(创建或者跳转到该界面需要传入参数,详见集成会话消息界面) 修改界面 UI 请参见自定义会话消息 UI |
GroupChatViewController |
NETeamUIKit | 群聊会话页面(创建或者跳转到该界面需要传入参数,详见集成会话消息界面) 修改界面 UI 请参见自定义会话消息 UI |
音视频通话
集成会话界面后,如果需要在会话消息界面实现音视频通话功能,请参见实现音视频通话。
常见问题排查
pod 冲突报错
-
问题原因
如果执行步骤1导入组件时,只导入了 IM UIKit 的 UI 组件,在特殊情况下可能出现库版本不一致导致的报错(UI 组件版本与其内部依赖的基础 kit 库的版本不一致)。
以下图所示的报错为例,导入的 IM UIKit 的 UI 组件版本为 v9.3.0,但导入的基础 Kit 库版本为 v9.3.2。这会导致基础库用到日志库(
alog
)和 UI 组件用到的alog
不一致,进而导致 pod 冲突报错。 -
处理建议:
导入 UI 组件时,同时也指定相同版本的基础 Kit 库。
以导入 v9.3.0 的 UI 组件为例:
#基础kit库 pod 'NECommonUIKit', '9.3.0' pod 'NECommonKit', '9.3.0' pod 'NECoreIMKit', '9.3.0' pod 'NECoreKit', '9.3.0'