开发者中心

名称:上海璟梦信息科技有限公司IM SDK 集成文档
版本:V1.0.0
日期:2021-12-24

1.集成指南

1.1 申请appId

用户需要上海璟梦信息科技有限公司开发者平台申请

1.2 导入SDK包

  1. 导入  CLIMSDK
  2. 导入 CLAVSDK(如果用户不需要音视频聊天,可以不导入)

ps:需要申请对应设备权限

1.3 配置

  1. 添加系统库  Accelerate.framework
  2. 推送服务,demo中提供注册示例,用户自己注册,需要将获取的token或者voip token 绑定IM后台,以便于提供离线推送服务。

用户需要在开发者账号开通推送服务,以及上传对应的推送证书.p12

  1. 需要在Build Settings -> Other Linker Arguments 中,添加**-ObjC**

1.4 支持

  • 支持架构:arm7 ,arm64

2.接口调用

一、系统模块

1.初始化

///SDK初始化
- (void)initWithAppId:(NSString *)appId appSecret:(NSString *)appSecret

二、 用户模块

1.用户登录

/// 登录
/// @param userId 用户Id
/// @param completion completion 完成回调
- (void)loginIMWithUserId:(NSString *)userId
               completion:(void (^)(CLImUserInfo * _Nullable userInfo, CLImError * _Nullable error))completion

2.用户退出

/// 退出登录
/// @param completion 完成回调
- (void)logoutWithCompletion:(void (^)(CLImError * _Nullable error))completion;

3.修改用户信息

/// 修改用户信息
/// @param userInfo 用户信息
/// @param completion 完成回调
- (void)modifyUserInfo:(CLImUserInfo *)userInfo
            completion:(void(^)(CLImError *_Nullable error))completion;

4.查找用户信息

/// 获取用户信息
/// @param userId 用户id
/// @param complete 完成回调
- (void)getUserInfoById:(NSString *)userId
             completion:(void(^)(CLImUserInfo *_Nullable info, CLImError *_Nullable error))complete

三、好友模块

1.添加好友

/// 添加好友
/// @param contacts 对方用户部分信息
/// @param message 加好友的附带消息
/// @param custom 客户自定义值
/// @param completion 回调
- (void)addContacts:(CLImContact *)contacts
            message:(NSString *_Nullable)message
             custom:(NSString *_Nullable)custom
         completion:(void(^)(CLImError *_Nullable error))completion;

2.同意/拒绝好友请求

/// 是否同意添加好友
/// @param reqModel 添加好友请求model
/// @param pass 是否通过
/// @param message 附带消息
/// @param completion 回调
- (void)passFriendReq:(CLImFriendReqModel *)reqModel
                 pass:(BOOL)pass
              message:(NSString *)message
           completion:(void(^)(CLImError *_Nullable error))completion;

3.删除好友

/// 删除好友
/// @param contacts 好友信息model
/// @param completion 回调
- (void)deleteContacts:(CLImContact *)contacts
            completion:(void(^)(CLImError *_Nullable error))completion;

4.查询好友列表

/// 获取好友列表
/// @param page 起始页
/// @param pageSize 每页数据条数
/// @param completion 回调
- (void)getContactsListWithPage:(int32_t)page
                       pageSize:(int32_t)pageSize
                     completion:(void(^)(NSArray <CLImContact *>*_Nullable list, CLImError *_Nullable error))completion;

5.黑名单

1. 获取黑名单列表

/// 获取黑名单列表
/// @param page 页数
/// @param pageSize 页大小
/// @param completion 回调
- (void)getBlackFriendListWithPage:(int32_t)page
                          pageSize:(int32_t)pageSize
                        completion:(void(^)(NSArray <CLImContact *>*_Nullable list, CLImError *_Nullable error))completion;

2. 拉入黑名单

/// 拉黑好友
/// @param userId 好友ID
/// @param nickName 好友昵称
/// @param completion 回调
- (void)setBlackFriendWithUserId:(NSString *)userId
                        nickName:(NSString *)nickName
                      completion:(void(^)(CLImError *_Nullable error))completion;

3. 移除黑名单

/// 移出黑名单列表
/// @param userId 好友ID
/// @param nickName 好友昵称
/// @param completion 回调
- (void)removeBlackFriendWithUserId:(NSString *)userId
                           nickName:(NSString *)nickName
                         completion:(void(^)(CLImError *_Nullable error))completion;

6.设置好友聊天置顶

/// 置顶(好友会话是否置顶)
/// @param friendId 好友ID
/// @param isTop 是否置顶 0不1是
/// @param completion 回调
- (void)modifyFriendTopWithId:(NSString *)friendId
                          top:(BOOL)isTop
                   completion:(void (^)(CLImError * _Nullable error))completion;

7.设置好友免打扰

/// 设置好友备注
/// @param userId 好友ID
/// @param markname 备注
/// @param completion 回调
- (void)setFriendMarkWithUserId:(NSString *)userId
                       markname:(NSString *)markname
                     completion:(void(^)(CLImError *_Nullable error))completion;

8.设置好友备注

/// 设置好友备注
/// @param userId 好友ID
/// @param markname 备注
/// @param completion 回调
- (void)setFriendMarkWithUserId:(NSString *)userId
                       markname:(NSString *)markname
                     completion:(void(^)(CLImError *_Nullable error))completion;

9.音视频呼叫操作

1. 取消呼叫

/// 取消呼叫
/// @param otherUserId 被取消的用户
/// @param messageId 消息Id
/// @param completion 回调
- (void)cancelCallingWithUserId:(NSString *)otherUserId
                      messageId:(NSString *)messageId
                     completion:(void (^)(CLImError * _Nullable))completion;

2. 拒绝呼叫

/// 接受或者拒绝接听
/// @param otherUserId 被……的用户
/// @param passType 接受或者拒绝 YES:接受 NO:拒绝
/// @param messageId 消息Id
/// @param completion 回调
- (void)receiveCallingWithUserId:(NSString *)otherUserId
                        passType:(BOOL)passType
                       messageId:(NSString *)messageId
                      completion:(void (^)(CLImError * _Nullable))completion;

四、消息模块

1、主要类介绍

1.消息类介绍

CLImMessage SDk发送与接收的消息体

2.消息方位类

typedef NS_ENUM(NSInteger, CLImMessageDirection) {
    CLImMessageDirectionSend = 0,    /*! \~chinese 发送的消息 \~english Send */
    CLImMessageDirectionReceive,     /*! \~chinese 接收的消息 \~english Receive */
};

3.聊天属性

typedef NS_ENUM(NSInteger,CLImMessageType){
    CLImMessageTypeChat = 1,  //单聊
    CLImMessageTypeGroup,     //群聊
};

4.消息类型

#import "CLImMessageBody.h"

#import "CLImMessageTextBody.h"      //文本消息
#import "CLImMessageImageBody.h"     //图片消息
#import "CLImMessageFileBody.h"      //文件本消息
#import "CLImMessageVoiceBody.h"     //语音消息
#import "CLImMessageVideoBody.h"     //视频消息
#import "CLImMessageLocationBody.h"  //定位消息
#import "CLImMessageCallingBody.h"   //呼叫消息
#import "CLImMessageCmdBody.h"       //系统消息
#import "CLImMessageCustomBody.h"    //自定义消息

5.消息状态报告

**CLImMessage **属性messageStatus进行设置

/**1已发送, 2已接收, 3已读*/
@property (nonatomic,assign) NSInteger messageStatus;

/// 发送消息回执
/// @param message 消息体
/// @param status  1已发送(后台返回状态),2已接收,3已阅读
/// @param completion 回调
- (void)sendMessageAck:(NSArray <CLImMessage *>*)message
                status:(int32_t)status
            completion:(void(^)(CLImError *_Nullable error))completion;

2、消息

1.消息发送

/// 发送消息 (成功标志,消息体有messageID,error为nil)
/// @param message 消息体
/// @param completion 完成回调
- (void)sendMessage:(CLImMessage *)message
         completion:(void (^)(CLImMessage * _Nullable, CLImError * _Nullable))completion;

2.消息接收

@property(nonatomic, weak, readonly) id chatManager;
// 添加代理:
[[CLImClient shared].chatManager addDelegate:self];

- (void)messageDidReceived:(nonnull CLImMessage *)message {
  //处理对应的消息
  //添加到当前的消息数据源数组
  ///刷新数据列表
}

3.获取历史消息

/// 获取历史消息
/// @param conversationId 会话ID
/// @param messageType 聊天类型
/// @param msgId 拉取消息的起始id,为空则从最新值开始
/// @param pageSize 页大小
/// @param completion 回调
- (void)getHistoryMessagesWithConversationId:(NSString * _Nonnull)conversationId
                                 messageType:(CLImMessageType)messageType
                                   fromMsgID:(NSString *)msgId
                                    pageSize:(int32_t)pageSize
                                  completion:(void(^)(NSArray <CLImMessage *>*_Nullable messageList, CLImError *_Nullable error))completion;

4.获取未读消息

/// 获取历史未读消息
/// @param pageSize 页大小,最大值100
/// @param completion 回调
- (void)getMessageListWithPageSize:(int32_t)pageSize
                              completion:(void (^)(NSArray<CLImMessage *> * _Nullable list, CLImError * _Nullable error))completion;


/// 获取未读消息数
/// @param completion 回调
- (void)getUnReadMessageCountWithCompletion:(void (^)(int32_t count, CLImError * _Nullable error))completion;

五、群组模块

1.群组操作

获取群对象 [CLImClient shared].groupManager,并遵守代理

@protocol CLImGroupManager <NSObject>
- (void)addDelegate:(id<CLImGroupManagerDelegate>)aDelegate;
- (void)removeDelegate:(id<CLImGroupManagerDelegate>)aDelegate;

1. 创建群组

/// 创建群组(创建群聊时拉人进群默认是不需要对方同意直接进群)
/// @param options 创建信息
/// @param completion 完成回调,若groupid和error同时存在则创建群成功而邀请好友加群失败
- (void)createGroup:(CLImGroupOptions *)options
         completion:(void(^)(NSString *_Nullable groupId, CLImError *_Nullable error))completion;

2. 解散群组

/// 解散群组(群主权限)
/// @param groupId 群组ID
/// @param completion 回调
- (void)disbandGroupWithGroupId:(NSString *)groupId
                     completion:(void(^)(CLImError *_Nullable error))completion;

3. 修改群名称

/// 修改群组名称
/// @param groupId 群组id
/// @param groupName 新群组名称(最长不超过16个字)
/// @param completion 完成回调
- (void)modifyGroupId:(NSString *)groupId
            groupName:(NSString *)groupName
           completion:(void(^)(CLImError *_Nullable error))completion;

4. 修改群公告

/// 修改群通知
/// @param groupId 群id
/// @param groupNotice 新群通知
/// @param completion 完成回调
- (void)modifyGroupId:(NSString *)groupId
          groupNotice:(NSString *)groupNotice
           completion:(void(^)(CLImError *_Nullable error))completion;

5. 修改群介绍

/// 修改群介绍
/// @param groupId 群组id
/// @param groupIntro 群介绍
/// @param completion 回调
- (void)modifyGroupId:(NSString *)groupId
           groupIntro:(NSString *)groupIntro
           completion:(void(^)(CLImError *_Nullable error))completion;

6. 群详情

/// 获取群详情
/// @param groupId 群ID
/// @param completion 回调
- (void)queryGroupInfoWithGroupId:(NSString *)groupId
                       completion:(void(^)(CLImGroupInfo *_Nullable info, CLImError *_Nullable error))completion;

2.群文件操作

操作对象: [CLImClient shared].groupManager

1. 添加群文件

/// 群文件上传(群文件消息附带的文件不会默认放到群文件列表里,如需要请单独调用此接口)
/// @param groupId 群id
/// @param fileName 文件名字
/// @param fileUrl 文件链接地址
/// @param fileSize 文件大小
/// @param completion 回调,成功则fileId有值
- (void)uploadGroupFileWithGroupId:(NSString *)groupId
                          fileName:(NSString *)fileName
                           fileUrl:(NSString *)fileUrl
                          fileSize:(int64_t)fileSize
                        completion:(void(^)(NSString *_Nullable fileId, CLImError *_Nullable error))completion;

2. 删除群文件

/// 删除群文件
/// @param groupId 群Id
/// @param fileId 文件Id
/// @param completion 回调
- (void)deleteGroupFileWithGroupId:(NSString *)groupId
                            fileId:(NSString *)fileId
                        completion:(void(^)(CLImError *_Nullable error))completion;

3. 获取群文件列表

/// 获取文件列表
/// @param groupId 群ID
/// @param page 起始页
/// @param pageSize 每页条数
/// @param completion 回调
- (void)getGroupFileWithGroupId:(NSString *)groupId
                           page:(int32_t)page
                       pageSize:(int32_t)pageSize
                     completion:(void (^)(NSArray <CLImFileInfo *>*_Nullable fileList, CLImError * _Nullable))completion;

3.群内操作

1. 修改群昵称

/// 修改群内显示名称
/// @param groupId 群ID
/// @param markName 昵称
/// @param completion 回调
- (void)modifyGroupId:(NSString *)groupId
             markName:(NSString *)markName
           completion:(void (^)(CLImError *_Nullable error))completion;

2.加入群聊

/// 申请加入群聊
/// @param groupId 群组id
/// @param userId 申请用户Id
/// @param completion 回调
- (void)applyToJoinGroupWithGroupId:(NSString *)groupId
                             userId:(NSString *)userId
                         completion:(void(^)(CLImError *_Nullable error))completion;

3. 退群

/// 退出群组
/// @param groupId 群组id
/// @param completion 完成回调
- (void)leaveGroup:(NSString *)groupId
        completion:(void(^)(CLImError *_Nullable error))completion;

4. 邀请好友进群

/// 邀请用户加入群组
/// @param groupId 群组id
/// @param groupName 群组名称
/// @param users 用户id列表
/// @param message 附加消息
/// @param needAgree 是否需要被邀请者同意(NO, 不需要, YES,需要)
/// @param completion 完成回调
- (void)inviteUsersToGroup:(NSString *)groupId
                 groupName:(NSString *)groupName
                     users:(NSArray *)users
                   message:(NSString *)message
                     agree:(BOOL)needAgree
                completion:(void(^)(CLImError *_Nullable error))completion;

5. 群邀请回应

/// 被邀请用户加入群组回应
/// @param groupId 群组ID
/// @param groupName 群组名称
/// @param userId 邀请者用户ID
/// @param nickName 邀请者昵称
/// @param messageId 邀请加群消息ID
/// @param ackType 是否同意 0拒绝 1同意
/// @param completion 回调
- (void)inviteAckGroupID:(NSString *)groupId
               groupName:(NSString *)groupName
            inviteUserId:(NSString *)userId
          inviteNickName:(NSString *)nickName
               messageId:(NSString *)messageId
                 ackType:(BOOL)ackType
              completion:(void(^)(CLImError *_Nullable error))completion;

6. 移除群成员

/// 移除群成员
/// @param groupId 群组Id
/// @param removeUserId 被移除的群成员Id
/// @param completion 回调
- (void)removeGroupUserWithGroupId:(NSString *)groupId
                            userId:(NSString *)removeUserId
                        completion:(void(^)(CLImError *_Nullable error))completion;

7. 群成员禁言/解禁

/// 禁言部分群普通成员 (1、群主不能禁言自己 2、管理员不能禁言群主、自己、其余管理员 3、普通人员无禁言权限)
/// @param groupId 群组ID
/// @param users 被禁言的群成员userID
/// @param isMute 是否禁言
/// @param completion 回调
- (void)muteGroupUsersWithGroupId:(NSString *)groupId
                            users:(NSArray<NSString *> *)users
                             mute:(BOOL)isMute
                       completion:(void (^)(CLImError * _Nullable error))completion;

/// 群禁言(群主一键全禁)
/// @param groupId 群组ID
/// @param isMute 是否开启禁言
/// @param completion 回调
- (void)muteGroupWithGroupId:(NSString *)groupId
                        mute:(BOOL)isMute
                  completion:(void (^)(CLImError * _Nullable error))completion;

8. 查询群成员列表

/// 获取群成员列表
/// @param groupId 群ID
/// @param role 角色 :0:所有成员,1:owner 群主, 2:member普通群成员, 3:admin 群管理员
/// @param page 起始页
/// @param pageSize 每页数据数
/// @param completion 回调
- (void)getGroupMembersListWithGroupId:(NSString *)groupId
                                  role:(int32_t)role
                                  page:(int32_t)page
                              pageSize:(int32_t)pageSize
                            completion:(void(^)(NSArray <CLImGroupMemberContact *>*_Nullable userList, CLImError *_Nullable error))completion;

9. 查询当前用户群列表

/// 获取群列表
/// @param page 起始页
/// @param pageSize 每页数据数
/// @param completion 回调
- (void)getGroupListWithPage:(int32_t)page
                    pageSize:(int32_t)pageSize
                  completion:(void(^)(NSArray <CLImGroupInfo *>*_Nullable groupList, CLImError *_Nullable error))completion;

10. 设置群聊免打扰

/// 设置群消息免打扰
/// @param groupId 群ID
/// @param disturb 是否开启免打扰:0不开启,1开启
/// @param completion 回调
- (void)setGroupDisturbWithGroupId:(NSString *)groupId
                           disturb:(BOOL)disturb
                        completion:(void(^)(CLImError *_Nullable error))completion;

11. 设置群聊置顶

/// 群置顶(会话置顶,更新到群列表属性中,然后更新到会话属性上)
/// @param groupId 群ID
/// @param isTop 是否置顶
/// @param completion 回调
- (void)modifyGroupId:(NSString *)groupId
                  top:(BOOL)isTop
           completion:(void (^)(CLImError * _Nullable error))completion;

12. 查找群用户信息

/// 获取具体成员信息
/// @param groupId 群ID
/// @param userId 查找对象的userID
/// @param completion 回调
- (void)getGroupMemberInfoWithGroupId:(NSString *)groupId
                               userId:(NSString *)userId
                           completion:(void(^)(CLImGroupMemberContact *_Nullable info, CLImError *_Nullable error))completion;

13. 获取群消息已读成员列表

/// 获取自己发送的群消息状态
/// @param groupId 群组ID
/// @param messageId 消息ID
/// @param completion 回调,已读成员的key是read,未读的是unRead
- (void)acquireGroupMessageStatusListWithGroupId:(NSString *)groupId
                                       messageId:(NSString *)messageId
                                      completion:(void(^)(NSDictionary <NSString *, CLImGroupMemberContact *>*_Nullable data, CLImError *_Nullable error))completion;

六、系统消息

1.获取通知消息

/// 获取系统未读消息(好友请求、群邀请请求)
/// @param msgID 拉取消息的起始id,为空则从最新值开始
/// @param pageSize 页大小,最大100
/// @param completion 回调,返回CLImFriendReqModel好友请求、CLImGroupInvitationModel群邀请类型
- (void)getUnReadSystemMessageListWithFromMsgID:(NSString * _Nullable)msgID
                                       pageSize:(int32_t)pageSize
                                     completion:(void (^)(NSArray * _Nullable list, CLImError * _Nullable error))completion;

七、群组@消息

1.@消息构建

群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 UI 上显示会有不同。具体实现可以在消息扩展字段ext中添加**@标识 **, 如下 :

  1. 发送方将想要@的人的Id 通过扩展字段放到扩展消息中,并把消息发到群里。
  2. 群中成员在收到消息时,先检查扩展字段中是否有对应的字段,如果有,取出其中的用户Id。
  3. 检查取出的用户 Id 与当前登录的用户 Id 是否一致。
  4. 如果检测一致,需要在 UI 上做特殊处理,显示出对应的提示信息,如“[有人@我]“,如不一致,不做处理
// @某些人
message.ext = @{@"em_at_list":@[@"userl001",@"user002"]};

八、语音及视频聊天

1. 音视频初始化

#import "CLToolMacro.h"
#import "CLVoiceRtvManage.h"
#import "CLVoiceRtvAudioTools.h"

/**
 初始化

 @param appId appId和IM appId一致,appToken是IM使用的token
 @param environment kServerEnvironment枚举
 */
- (void)initWithAppId:(NSString *)appId appToken:(NSString *)appToken environment:(kServerEnvironment)environment
  
  /**
  添加代理
  */
[[CLVoiceRtvManage sharedInstance] addDelegate:self];

示例

//IM初始化成功后,才能获取
NSString * appId     = [CLImClient shared].appId;
NSString * appToken  = [CLImClient shared].appToken; 

[[CLVoiceRtvManage sharedInstance] initWithAppId:appId appToken:appToken environment:kServerEnvironment_Release];

2.语音参数配置

  • 音频聊天都需要用户加入同一个房间,必要参数是_roomId_和_roomSecrect_,生成方式用户可以自定义,也可以使用api生成,使用callingManager调用获得

**@property **** ** (nonatomic, weak, readonly) id callingManager

ps:当前字符串主要用户用户生成房间Id和房间密钥,用户也可以自己生成,确保房间id唯一即可。

/// 生成随机串(字母加数字,如 T76g)
/// @param len 随机串长度
- (NSString *)randomString: (int)len;

/// 生成随机串(数字,如 23234)
/// @param length 随机串长度
- (NSString *)randomNumber:(int)length

3.加入房间

/**
 登录房间
 @param userId 用户Id(透传客户方自己的用户编号)
 @param roomSecret 房间密钥
 @param roomId 房间Id(相同appId,相同roomId的用户会分配到同一个房间)
 */
- (void)loginRoomWithUserId:(NSString *)userId roomId:(NSString *)roomId roomSecret:(NSString *)roomSecret;

注意:登录房间,当前如果该房间roomId不存在时,调用该方法会自动创建一个房间;如果存在,会加入该房间。

1.构建发送呼叫

通过构建呼叫消息,发送给被呼叫方

CLIMMessageCallingBody * body  = [[CLIMMessageCallingBody alloc] init];
    body.type = CLImMessageBodyTypeVoiceCall;
    body.roomId = roomId;
    body.roomSecret = secret;
    body.content = @"语音呼叫";
    body.targetAppUserId = targetUserIds;
        
    CLImMessage * m = 生成CLImMessage对象
    m.from = [CLImClient shared].userId;
    
//发送呼叫消息
    [[CLImClient shared].callingManager startCallingWithMessage:m completion:^(CLImMessage * _Nonnull mess, CLImError * _Nullable error) {
        NSLog(@"呼叫发送%@",error.code==0?@"成功":@"失败");
    }];

2.接受呼叫

接收到呼叫消息之后,获取到roomId 和 roomSecrect 加入房间

 [[CLVoiceRtvManage sharedInstance] loginRoomWithUserId:self.userId roomId:self.roomId roomSecret:self.roomSecret];

3.上下麦

/**
 上/下麦
 @param micType YES:上麦 NO:下麦
 @param timeLimit 限时上麦时间(单位:秒),0不限制
 */
[[CLVoiceRtvManage sharedInstance] chatMicWithMicType:YES timeLimit:0];

4.设置扬声器模式

- (void)setAudioRouteToSpeaker;

5.设置听筒模式

- (void)setAudioRouteToNone;

6.退出房间

/**
 注销,用于切换房间 注:切换房间要先调用此方法退出当前房间,再登录其他房间
 */
- (void)logout;

4 视频房间

1.初始化

示例代码:

- (void)audioLoginVideoRoom{
    //1.初始化CLVoiceRtvManage
    CLVoiceRtvManage * rtv = [CLVoiceRtvManage sharedInstance];
    ///是否开启推流
    rtv.isOpenPushing = YES;
    ///摄像头是否开启
    rtv.cameraStatus  = 1;
    ///摄影头方向
    rtv.cameraPosition = GtVoiceVLCameraPositionType_Front;
    
    //获取加入视频房间的用户id数组,如 @[@"user001",@"user002"]
    NSArray * userIds = self.targetUserIds;
    
    //3.用户Id和视图关联
    NSMutableArray <GtVoiceVedioInfoModel *>*infoAry = [self createVideoRoomView:userIds];
    
    //4.根据用户Id找到视图
    NSInteger roomIndex = [self.videoContentView getIndexWithUserIds:self.userId];
    
    //5.当前用户加入视频流
    [rtv loginVideoRoomWithRoomId:self.roomId userId:self.userId position:roomIndex isOpenCamera:YES preView:self.videoContentView infoArray:infoAry];

2.创建视频接收视图

//将创建的视图view的frame与用户Id关联对应,生成 GtVoiceVedioInfoModel 数组
- (NSMutableArray <GtVoiceVedioInfoModel *>*)createVideoRoomView:(NSArray *)userIdAry{
    
    [self.view addSubview:self.videoContentView];
    
    NSArray<CLRoomVideoModel *> *rooms = [self.videoContentView roomVideoViewsWithUserIds:userIdAry];
    NSMutableArray * tmpAry = [NSMutableArray new];
    [userIdAry enumerateObjectsUsingBlock:^(NSString * userId, NSUInteger idx, BOOL * _Nonnull stop) {
        CLRoomVideoModel * model = rooms[idx];
        GtVoiceVedioInfoModel * viewModel = [[GtVoiceVedioInfoModel alloc] initWithRect:model.roomView.frame userId:userId position:idx];
        [tmpAry addObject:viewModel];
    }];
    return tmpAry;
}

3.代理回调

#pragma mark - CLVoiceRtvManageDelegate
///登录回调
- (void)chatManage:(CLVoiceRtvManage *)sender loginRespWithResult:(int)result msg:(NSString *)msg{
    NSLog(@"【实时语音】登录回调 %@",msg);
    if (self.isCaller == NO) {
      //登录成功上麦
        [self audioStartRealtimeVoice];
    }
}
- (void)chatManage:(CLVoiceRtvManage *)sender msgNotify:(CLVoiceRtvMsgNotify *)msgNotify {
    switch (msgNotify.msgType) {
        case GtVoiceRtvMessageType_Login:{
          //有人登录了
          //上麦
            [self audioStartRealtimeVoice];
        }
            break;
        case GtVoiceRtvMessageType_Logout:
        {
            if (msgNotify.remainNum <=1) {
              //有人退出房间了
              //当房间人数小于等于1时,解散当前房间
                [self removeDeallocCall];
            }
        }
            break;
        default:
            break;
    }
}

4.退出视频房间

/**
 退出房间
 */
- (void)logout;

示例:
[[CLVoiceRtvManage sharedInstance] logoutVideoRoom];

九、 更新说明

发布日期 发布版本 更新说明
2021-12-23 V1.0.0 初版发布