实现圈组消息收发
更新时间: 2024/08/22 17:21:31
圈组是网易云信 IM 即时通讯服务的全新能力,可用来帮助您快速构建 “类 Discord 即时通讯社群”。
本文介绍如何通过较少的代码集成 NetEase IM SDK (以下简称 NIM SDK)并调用 API,在您的应用中实现圈组消息收发。
使用前准备
- 已在云信控制台创建应用,获取 App Key。
- 已注册云信 IM 账号,获取 IM 账号和 token。
- 已在云信控制台开通和配置圈组功能。
- 开发环境需满足 iOS 9.0 及以上版本,可使用 iPhone/iPad 真机或模拟器。
实现流程
流程概览
实现圈组消息收发的流程,可分为下图所示的 4 大步骤。
圈组服务端与圈组服务器是两个不同概念,前者指云信服务端提供圈组功能的部分,后者为圈组的特殊概念,对应 Discord 的 Server, 为社群本身。
步骤 0:新建项目(可选)
此步骤以新建新项目为例,若集成到已有项目,可忽略此步骤
1. 启动 Xcode,在左上角选择File > New > Project。2. 在出现的工作表中,选择 iOS 平台,并在 Application 下选择 App。
3. 配置新建项目,完成后,单击 Next。
必须填写 Product Name 和 Organization Identifier。
4. 选择项目存储路径,单击 Create 创建项目。
步骤 1:集成 SDK
本文主要介绍在 CocoaPods 中添加远程依赖项的集成方式。手动集成方式请参见集成 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>
-
调用
registerWithOptionV2
方法初始化 SDK,推荐在应用程序启动时初始化。初始化成功后,即可使用 V10 所有的 API。objc
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:appKey]; option.apnsCername = @"your apns certificate"; option.pkCername = @"your push kit certificate"; // 配置 useV1Login V2NIMSDKOption *v2Option = [[V2NIMSDKOption alloc] init]; //激活 V10 所有 API,默认使用 V10 的登录接口登录 IM v2Option.useV1Login = NO; //若仍使用 V9 的登录接口登录 IM //v2Option.useV1Login = YES; [[NIMSDK sharedSDK] registerWithOptionV2:option v2Option:v2Option];
以上提供了一个简化的初始化示例,更多初始化信息请参见初始化 SDK。
步骤 3:登录 IM
客户端用户在使用云信即时通讯功能前需要先登录云信 IM。
V10 已采用融合登录方案,用户只需要调用 V2NIMLoginService#login
方法登录一次,则可以同时使用 IM 与圈组,无需再单独登录圈组服务器。
调用 V2NIMLoginService#login
后调用 login:token:completion:
方法将会报错。
以静态 Token 登录方式为例,示例代码如下:
objective-c- (id<V2NIMLoginService>)getV2LoginService {
return [[NIMSDK sharedSDK] v2LoginService];
}
- (void)login {
NSString *accountId = @"accountId";
NSString *token = @"token";
id<V2NIMLoginService> service = [self getV2LoginService];
[service login:accountId
token:token
option:nil
success:^{
NSLog(@"login succ");
} failure:^(V2NIMError * _Nonnull error) {
NSLog(@"login fail: error = %@", error);
}];
}
其他登录方式请参见登录及登出 IM。
步骤 4:圈组消息收发
本节以介绍在不考虑用户权限控制(可通过身份组控制)的情况下,使用 SDK API 快速实现圈组消息收发的流程。
-
接收方注册
NIMQChatMessageManagerDelegate
的onRecvMessages:
方法监听圈组消息接收事件。示例代码如下:
objective-c
//在某处添加代理对象 [NIMSDK sharedSDK].qchatMessageManager addDelegate:self]; //... - (void)onRecvMessages:(NSArray< NIMQChatMessage * > *)messages { //收到消息 //处理展示等操作 }
-
发送方调用
createServer:completion:
方法创建圈组服务器。为了更加快速地实现消息收发,创建时可将inviteMode
设置为NIMQChatServerInviteModeAutoEnter
(发送邀请后,不需要被邀请方同意,被邀请方立即加入服务器)。创建成功后,需记录服务器的 ID(
serverId
),后续步骤将需要传入serverId
。
示例代码如下:
objective-c
NIMQChatCreateServerParam *param = [[NIMQChatCreateServerParam alloc] init]; param.name = @"YourApp"; param.inviteMode = NIMQChatServerInviteModeAutoEnter; id <NIMQChatServerManager> qchatServerManager = [[NIMSDK sharedSDK] qchatServerManager]; [qchatServerManager createServer:param completion:^(NSError *error, NIMQChatCreateServerResult *result) { // your code }];
-
发送方调用
createChannel:completion:
方法,调用时传入上一步中创建的服务器的serverId
,且将viewMode
和type
分别设置为NIMQChatChannelViewModePublic
(公开频道)和NIMQChatChannelTypeMsg
(消息频道),从而在服务器中创建一个消息类型的公开频道。创建成功后,需记录频道的 ID(
channelId
),后续步骤将需要传入channelId
。
示例代码如下:
objective-c
id<NIMQChatChannelManager> qchatChannelManager = [[NIMSDK sharedSDK] qchatChannelManager]; NIMQChatCreateChannelParam * param = [[NIMQChatCreateChannelParam alloc] init]; param.serverId = 123456; param.name = @"YourChannel"; param.type = NIMQChatChannelTypeMsg; param.viewMode = NIMQChatChannelViewModePublic; [qchatChannelManager createChannel:param completion:^(NSError *__nullable error, NIMQChatChannel *__nullable result) { // your code }];
-
发送方调用
inviteServerMembers:completion:
方法邀请接收方加入服务器。示例代码如下:
objective-c
NIMQChatInviteServerMembersParam *param = [[NIMQChatInviteServerMembersParam alloc] init]; param.serverId = 123456; param.accids = @[@"yunxin1", @"yunxin2", @"yunxin3"]; id <NIMQChatServerManager> qchatServerManager = [[NIMSDK sharedSDK] qchatServerManager]; [qchatServerManager inviteServerMembers:param completion:^(NSError *__nullable error, NIMQChatInviteServerMembersResult *__nullable result) { // your code }];
-
发送方调用
sendMessage:toSession:completion:
方法,调用时传入服务器与频道的 ID,从而在频道中发送一条消息。示例代码如下:
objective-c
id<NIMQChatMessageManager> qchatMessageManager = [[NIMSDK sharedSDK] qchatMessageManager]; NIMQChatMessage *message = [[NIMQChatMessage alloc] init]; NIMSession * session = [NIMSession sessionForQChat:121212 qchatServerId:123456]; message.text = @"文本消息的内容"; [qchatMessageManager sendMessage:message toSession:session completion:^(NSError *__nullable error) { // your code }];
-
接收方通过
NIMQChatMessageManagerDelegate
的onRecvMessages:
回调接收消息(NIMQChatMessage
)。
后续步骤
为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的测试用 IM 账号 和 token
,请确保在后续的正式生产环境中,将其替换为通过IM 新版服务端 API生成的正式 IM 账号和 token
。