实现单聊消息收发
更新时间: 2023/11/14 17:43:15
网易云信 IM 即时通讯服务提供一整套即时通讯基础能力,助您快速实现多样化的即时通讯场景。
本文主要介绍通过集成 NetEase IM SDK(NIM SDK)并调用 API,快速实现单聊消息收发功能。
使用前准备
- 已在云信控制台创建应用,获取 App Key。
- 已注册云信 IM 账号,获取 accid 和 token。
- 开发环境满足 iOS 8.0 及以上版本。
实现流程
流程概览
实现单聊消息收发的流程,可分为下图所示的 4 大步骤。
下图可能因为网络问题无法正常展示。如遇到该问题,一般刷新页面即可正常展示。
步骤 0:新建项目(可选)
此步骤以新建新项目为例,若集成到已有项目,可忽略此步骤
1. 启动 Xcode,在左上角选择File > New > Project。2. 在出现的工作表中,选择 iOS 平台,并在 Application 下选择 App。
3. 配置新建项目,完成后,单击 Next。
必须填写 Product Name 和 Organization Identifier。
4. 选择项目存储路径,单击 Create 创建项目。

步骤 1:集成 SDK
本文主要介绍在 CocoaPods 中添加远程依赖项的集成方式。手动集成方式请参见 SDK 集成。
-
在 SDK 下载页面查看 SDK 的最新版本,并查询本地仓库中对应的版本是否为最新版本。
若不是最新版本,建议先更新本地仓库,以确保可以集成最新的 SDK 版本。
pod search NIMSDK_LITE //本地仓库中查询 NIMSDK_LITE 信息
pod repo update //更新本地仓库
- 在项目根目录下的
Podfile
文件中写入以下内容。
pod 'NIMSDK_LITE'
- 执行以下命令安装 SDK。
pod install
步骤 2:初始化 SDK
将 SDK 集成到客户端后,需要先完成 SDK 的初始化才能使用其他功能。
- 在项目文件中引入头文件
NIMSDK.h
。
#import <NIMSDK/NIMSDK.h>
- 调用
registerWithOption:
方法初始化 SDK。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
//推荐在程序启动的时候初始化 NIMSDK
NSString *appKey = @"your app key";//云信分配的 appKey
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:appKey];
option.apnsCername = @"your APNs cer name";//APNs 推送证书名
option.pkCername = @"your pushkit cer name";//PushKit 推送证书名
[[NIMSDK sharedSDK] registerWithOption:option];
...
}
以上提供了一个简化的初始化示例,更多初始化信息请参见初始化 SDK。
步骤 3:登录 IM 服务端
客户端用户在使用云信即时通讯功能前需要先登录云信 IM 服务器。请使用已注册的云信账号进行登录。
调用NIMLoginManager
的login
方法进行登录。示例代码如下:
NSString *account = @"your account";
NSString *token = @"your token";
[[[NIMSDK sharedSDK] loginManager] login:account
token:token
completion:^(NSError *error) {}];
NIM SDK 支持自动重连机制。用户也可以注册监听来实时关注 IM 的登录状态,具体请参见登录章节。
步骤 4:单聊消息收发
本节以用户 A 和用户 B 的消息交互为例,介绍快速实现单聊消息收发的流程。更多消息类型的收发,请参见消息发送。
- 用户 B 调用
addDelegate:
方法添加委托,注册onRecvMessages:
回调函数,监听消息接收。示例代码如下:
// 在某处添加代理对象
[NIMSDK sharedSDK].chatManager addDelegate:self];
//...
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages
{
//收到消息
}
- 用户 A 构建文本消息并调用
sendMessage:toSession:error:
方法将消息发送给 B。示例代码如下:
// 这里主要以发送文本消息为例
NIMSession *session = [NIMSession session:@"user" type:NIMSessionTypeP2P];// 构造出具体会话:P2P单聊,对方账号为user
NIMMessage *message = [[NIMMessage alloc] init];// 构造出具体消息
message.text = @"hello";
NSError *error = nil;// 错误反馈对象
[[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:&error];// 发送消息
目前 NIM SDK 支持多种消息类型,包括文本消息、图片消息、语音消息、视频消息、文件消息、地理位置消息、提示消息、通知消息以及自定义消息。具体请参见消息发送。
onRecvMessages:
触发回调,用户 B 收到文本消息。
后续步骤
为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的测试用 IM 账号 和 token
,请确保在后续的正式生产环境中,将其替换为通过 IM 服务端 API 生成的正式 IM 账号(accid
)和 token
。