1、简介
ZegoLiveRoom SDK 内集成了即时通信功能,即 ZegoLiveRoomApi (IM),用户可调用相关 API 实现直播间内的 发消息、点赞、送礼物 等互动功能,也可选择直播间内的成员,发起会话。
本文主要讲述如何利用 ZegoLiveRoomApi (IM) 中的 API 实现相关功能,还是以iOS环境为例,请从 ZegoLiveRoom iOS 下载 SDK。
2、步骤
2.1 登录房间
使用 IM 功能的前置条件是登录同一个房间。
同 初级功能指南-推流、初级功能指南-拉流 中的登录流程一致,开发者可调用以下 2 个 API 进行登录。
ZegoLiveRoomApi.h
/**
登录房间
@param roomID 房间 ID,不超过 255 bytes,支持可打印字符
@param role 成员角色,可取值为ZEGO_ANCHOR(主播),ZEGO_AUDIENCE(观众),详见 ZegoRole 定义
@param blk 回调 block
@return true 成功,false 失败
@attention 登录房间成功,才能开始直播
@note 观众登录房间成功后,会在 blk 中返回当前房间的流信息
*/
- (bool)loginRoom:(NSString *)roomID role:(int)role withCompletionBlock:(ZegoLoginCompletionBlock)blk;
/**
登录房间
@param roomID 房间 ID,不超过 255 bytes,支持可打印字符
@param roomName 房间名称,可选,不超过 255 bytes,支持可打印字符
@param role 成员角色,可取值为ZEGO_ANCHOR(主播),ZEGO_AUDIENCE(观众),详见 ZegoRole 定义
@param blk 回调 block
@return true 成功,false 失败
@attention 登录房间成功,才能开始直播
@note 观众登录房间成功后,会在 blk 中返回当前房间的流信息
*/
- (bool)loginRoom:(NSString *)roomID roomName:(NSString *)roomName role:(int)role withCompletionBlock:(ZegoLoginCompletionBlock)blk;
请开发者在使用 IM 功能前,确保登录成功。
2.2 设置 IM 代理对象
调用如下 API 设置 ZegoIMDelegate 代理对象。设置代理对象失败,会导致 App 收不到相关回调。
ZegoLiveRoomApi-IM.h
/**
设置 IM 代理对象
@param imDelegate 遵循 ZegoIMDelegate 协议的代理对象
@return true 成功,false 失败
@attention 使用 IM 功能,初始化相关视图控制器时需要设置代理对象
@note 未设置代理对象,或对象设置错误,可能导致无法正常收到相关回调
*/
- (bool)setIMDelegate:(id<ZegoIMDelegate>)imDelegate;
2.3 直播间内互动消息
直播间中的聊天、点赞、送礼物等互动功能,均是通过消息收发来实现的。
发送消息
开发者可调用此 API 在指定房间内发送广播消息,通过入参中的 ZegoMessageCategory 来区分消息类别。
ZegoLiveRoomApi-IM.h
/**
房间发送广播消息
@param content 消息内容,不超过 1024 bytes,支持可打印字符
@param type 消息类型,可以自定义
@param category 消息分类,可以自定义
@param priority 消息优先级
@param completionBlock 消息发送结果,回调 server 下发的 messageId
@return true 成功,false 失败
@attention 实现点赞主播、评论、送礼物等 IM 功能时,需要调用本 API
*/
- (bool)sendRoomMessage:(NSString *)content type:(ZegoMessageType)type category:(ZegoMessageCategory)category priority:(ZegoMessagePriority)priority completion:(ZegoRoomMessageCompletion)completionBlock;
其中,ZegoMessageCategory 支持的内置类别有:
/** 消息类别 */
typedef enum
{
ZEGO_CHAT = 1, /**< 聊天 */
ZEGO_SYSTEM, /**< 系统 */
ZEGO_LIKE, /**< 点赞 */
ZEGO_GIFT, /**< 送礼物 */
ZEGO_OTHER_CATEGORY = 100, /**< 其他 */
} ZegoMessageCategory;
收取房间消息
设置 ZegoIMDelegate 代理对象成功后,房间内成员调用 sendRoomMessage:type:category:priority:completion: 发送消息成功,同一房间内的其他成员会在此回调中收到此消息。
ZegoLiveRoomApi-IM.h
/**
收到房间的广播消息
@param roomId 房间 Id
@param messageList 消息列表,包括消息内容,消息分类,消息类型,发送者等信息
@attention 调用 [ZegoLiveRoomApi (IM) -sendRoomMessage:type:category:priority:completion:] 发送消息,会触发此通知
*/
- (void)onRecvRoomMessage:(NSString *)roomId messageList:(NSArray<ZegoRoomMessage*> *)messageList;
2.4 直播间内会话
直播间中除了成员间互动外,还可以选择直播间观众,创建会话组,进行会话。
设置房间配置
创建会话前,开发者需要调用此 API 设置房间配置。
/**
设置房间配置信息
@param audienceCreateRoom 观众是否可以创建房间。true 可以,false 不可以。默认 true
@param userStateUpdate 用户状态(用户进入、退出房间)是否广播。true 广播,false 不广播。默认 false
@attention 在 userStateUpdate 为 true 的情况下,用户进入、退出房间会触发 [ZegoLiveRoomApi (IM) -onUserUpdate:updateType:] 回调
*/
- (void)setRoomConfig:(bool)audienceCreateRoom userStateUpdate:(bool)userStateUpdate;
请注意,以下对会话的操作,均基于观众可以创建房间的前提。
创建会话
开发者调用此 API 创建会话。
请注意,会话成员必须是同一直播间内的观众,不可以跨房间创建会话!
ZegoLiveRoomApi-IM.h
/**
在房间中创建一个会话
@param conversationName 会话名称,不超过 255 bytes,支持可打印字符
@param memberList 会话成员列表
@param completionBlock 创建结果,回调 server 下发的会话 Id
@return true 成功,false 失败
*/
- (bool)createConversation:(NSString *)conversationName memberList:(NSArray<ZegoUser *> *)memberList completion:(ZegoCreateConversationCompletion)completionBlock;
发送会话消息
会话创建成功后,开发者调用此 API 向会话发送消息。
其中的 conversationId 是创建会话成功后,由 Server 通过 ZegoCreateConversationCompletion Block 返回。
ZegoLiveRoomApi-IM.h
/**
在会话中发送一条消息
@param content 消息内容,不超过 1024 bytes,支持可打印字符
@param type 消息类型,可以自定义
@param conversationId 会话 Id,不超过 255 bytes,支持可打印字符
@param completionBlock 发送消息结果,回调 server 下发的 conversationId
@return true 成功,false 失败
*/
- (bool)sendConversationMessage:(NSString *)content type:(ZegoMessageType)type conversationId:(NSString *)conversationId completion:(ZegoConversationMessageCompletion)completionBlock;
收取会话消息
设置 ZegoIMDelegate 代理对象成功后,某成员向会话中发送消息成功,其他成员会在此回调中收到消息。
ZegoLiveRoomApi-IM.h
/**
收到会话消息
@param roomId 房间 Id
@param conversationId 会话 Id
@param message 会话消息,包括消息内容,消息类型,发送者,发送时间等信息
@attention 调用 [ZegoLiveRoomApi (IM) -sendConversationMessage:type:conversationId:completion] 发送消息,会触发此通知
*/
- (void)onRecvConversationMessage:(NSString *)roomId conversationId:(NSString *)conversationId message:(ZegoConversationMessage *)message;
获取会话信息
开发者可调用此 API 查询会话的信息。
ZegoLiveRoomApi-IM.h
/**
获取会话相关信息
@param conversationId 会话 Id,不超过 255 bytes,支持可打印字符
@param completionBlock 获取结果,包括会话名称,会话成员,创建者等信息
@return true 成功,false 失败
*/
- (bool)getConversationInfo:(NSString *)conversationId completion:(ZegoConversationInfoBlock)completionBlock;
2.5 直播间内成员更新
设置 ZegoIMDelegate 代理对象成功,并且调用 2.4.1 中的 setRoomConfig: userStateUpdate: 设置用户状态广播后,当直播间内有成员增减时,用户才可在此回调中收到通知。
ZegoLiveRoomApi-IM.h
/**
房间成员更新回调
@param userList 成员更新列表
@param type 更新类型(增量,全量)
@attention 当房间成员变化(例如用户进入、退出房间)时,会触发此通知
*/
- (void)onUserUpdate:(NSArray<ZegoUserState *> *)userList updateType:(ZegoUserUpdateType)type;