实现圈组消息收发

更新时间: 2024/03/15 16:12:34

圈组是网易云信 IM 即时通讯服务的全新能力,可用来帮助您快速构建 “类 Discord 即时通讯社群”。

本文介绍如何通过较少的代码集成 NetEase IM SDK (以下简称 NIM SDK)并调用 API,在您的应用中实现圈组消息收发。

使用前准备

实现流程

流程概览

实现圈组消息收发的流程,可分为下图所示的 4 大步骤。

uml diagram

圈组服务端圈组服务器是两个不同概念,前者指云信服务端提供圈组功能的部分,后者为圈组的特殊概念,对应 Discord 的 Server, 为社群本身。

步骤 0:新建项目(可选)

此步骤以新建新项目为例,若集成到已有项目,可忽略此步骤 1. 启动 Xcode,在左上角选择File > New > Project
2. 在出现的工作表中,选择 iOS 平台,并在 Application 下选择 App
3. 配置新建项目,完成后,单击 Next
必须填写 Product NameOrganization Identifier
4. 选择项目存储路径,单击 Create 创建项目。
新建项目

步骤 1:集成 SDK

本文主要介绍在 CocoaPods 中添加远程依赖项的集成方式。手动集成方式请参见集成 SDK

  1. 更新日志查看 SDK 的最新版本,并查询本地仓库中对应的版本是否为最新版本。

    若不是最新版本,建议先更新本地仓库,以确保可以集成最新的 SDK 版本。

    pod search NIMSDK_LITE   //本地仓库中查询 NIMSDK_LITE 信息
    pod repo update          //更新本地仓库
    
  2. 在项目根目录下的 Podfile 文件中写入以下内容。

    pod 'NIMSDK_LITE' 
    
  3. 执行以下命令安装 SDK。

    pod install
    

步骤 2:初始化 SDK

将 SDK 集成到客户端后,需要先完成 SDK 的初始化才能使用其他功能。

  1. 在项目文件中引入头文件 NIMSDK.h

    #import <NIMSDK/NIMSDK.h>
    
  2. 调用 registerWithOptionV2 方法初始化 SDK,推荐在应用程序启动时初始化。初始化成功后,即可使用 V10 所有的 API。

    objcNIMSDKOption *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 快速实现圈组消息收发的流程。

  1. 接收方注册 NIMQChatMessageManagerDelegateonRecvMessages: 方法监听圈组消息接收事件。

    示例代码如下:

    objective-c//在某处添加代理对象
    [NIMSDK sharedSDK].qchatMessageManager addDelegate:self];
    //...
    - (void)onRecvMessages:(NSArray< NIMQChatMessage * > *)messages {
        //收到消息
        //处理展示等操作
    }
    
  2. 发送方调用 createServer:completion: 方法创建圈组服务器。为了更加快速地实现消息收发,创建时可将 inviteMode 设置为NIMQChatServerInviteModeAutoEnter(发送邀请后,不需要被邀请方同意,被邀请方立即加入服务器)。

    创建成功后,需记录服务器的 ID(serverId),后续步骤将需要传入serverId


    示例代码如下:

    objective-cNIMQChatCreateServerParam *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
    }];
    
  3. 发送方调用 createChannel:completion: 方法,调用时传入上一步中创建的服务器的 serverId,且将 viewModetype 分别设置为 NIMQChatChannelViewModePublic(公开频道)和 NIMQChatChannelTypeMsg(消息频道),从而在服务器中创建一个消息类型的公开频道。

    创建成功后,需记录频道的 ID(channelId),后续步骤将需要传入channelId


    示例代码如下:

    objective-cid<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
    }];
    
  4. 发送方调用 inviteServerMembers:completion:方法邀请接收方加入服务器。

    示例代码如下:

    objective-cNIMQChatInviteServerMembersParam *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
    }];
    
  5. 发送方调用 sendMessage:toSession:completion: 方法,调用时传入服务器与频道的 ID,从而在频道中发送一条消息。

    示例代码如下:

    objective-cid<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
    }];
    
  6. 接收方通过 NIMQChatMessageManagerDelegateonRecvMessages: 回调接收消息(NIMQChatMessage)。

后续步骤

为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的测试用 IM 账号 和 token,请确保在后续的正式生产环境中,将其替换为通过IM 新版服务端 API生成的正式 IM 账号和 token

此文档是否对你有帮助?
有帮助
去反馈
  • 使用前准备
  • 实现流程
  • 流程概览
  • 步骤 0:新建项目(可选)
  • 步骤 1:集成 SDK
  • 步骤 2:初始化 SDK
  • 步骤 3:登录 IM
  • 步骤 4:圈组消息收发
  • 后续步骤