监听聊天室事件
聊天室业务为客户端 App 提供三种类型的事件委托协议:聊天室状态委托、聊天室成员变化委托、聊天室事件通知委托。
通过 IMLib SDK 提供的以上委托,您可以从融云服务端获取聊天室销毁状态、用户在当前及其他客户端加入退出聊天室的状态、聊天室中成员进出的事件通知、以及聊天室中成员禁言、封禁相关的信息。
| 委托协议 | 名称 | 说明 |
|---|---|---|
RCChatRoomStatusDelegate | 聊天室状态委托 | 接收在当前客户端上用户加入、退出聊天室的事件与聊天室销毁状态的信息。 |
RCChatRoomMemberDelegate | 聊天室成员变化委托 | 接收当前所在聊天室中用户加入、退出聊天室的信息。 |
ChatRoomNotifyEventDelegate | 聊天室事件通知委托 | 接收当前所在聊天室中成员禁言、封禁相关的信息;接收当前用户在 其他端加入、退出聊天室相关的信息。 |
监听聊天室状态
您可以调用 RCChatRoomClient 的 setChatRoomStatusDelegate 或 addChatRoomStatusDelegate 方法添加一个 RCChatRoomStatusDelegate 代理,来监听当前用户加入、退出聊天室的事件与已加入的聊天室销毁状态。
设置聊天室状态代理委托
[[RCChatRoomClient sharedChatRoomClient] setChatRoomStatusDelegate:self];
IMlib SDK 从 5.2.5 版本开始支持添加多代理,添加代理委托的方法如下:
[[RCChatRoomClient sharedChatRoomClient] addChatRoomStatusDelegate:self];
删除聊天室状态代理委托
IMLib SDK 从 5.2.5 版本开始支持添加多代理,删除代理委托的方法如下:
[[RCChatRoomClient sharedChatRoomClient] removeChatRoomStatusDelegate:self];
聊天室状态事件回调方法
下方列出了聊天室状态委托协议 RCChatRoomStatusDelegate 提供的事件列表及代理方法。
@protocol RCChatRoomStatusDelegate <NSObject>
/*!
开始加入聊天室的回调
- Parameter chatroomId: 聊天室ID
*/
- (void)onChatRoomJoining:(NSString *)chatroomId;
/*!
加入聊天室成功的回调
- Parameter chatroomId: 聊天室ID
- Parameter response: 加入成功返回的信息
- Since: 5.6.3
*/
- (void)onChatRoomJoined:(NSString *)chatroomId response:(RCJoinChatRoomResponse *)response;
/*!
加入聊天室成功的回调
- Parameter chatroomId: 聊天室ID
*/
- (void)onChatRoomJoined:(NSString *)chatroomId __deprecated_msg("Use [RCChatRoomStatusDelegate onChatRoomJoined:response:] instead");
/*!
加入聊天室失败的回调
- Parameter chatroomId: 聊天室ID
- Parameter errorCode: 加入失败的错误码
如果错误码是KICKED_FROM_CHATROOM或RC_CHATROOM_NOT_EXIST,则不会自动重新加入聊天室,App需要按照自己的逻辑处理。
*/
- (void)onChatRoomJoinFailed:(NSString *)chatroomId errorCode:(RCErrorCode)errorCode;
/*!
加入聊天室成功,但是聊天室被重置。接收到此回调后,还会收到 onChatRoomJoined:回调。
- Parameter chatroomId: 聊天室ID
*/
- (void)onChatRoomReset:(NSString *)chatroomId;
/*!
退出聊天室成功的回调
- Parameter chatroomId: 聊天室ID
*/
- (void)onChatRoomQuited:(NSString *)chatroomId;
/*!
聊天室被销毁的回调,用户在线的时候房间被销毁才会收到此回调。
- Parameter chatroomId: 聊天室ID
- Parameter type: 聊天室销毁原因
*/
- (void)onChatRoomDestroyed:(NSString *)chatroomId type:(RCChatRoomDestroyType)type;
@end
监听聊天室成员变化
IMLib SDK 从 5.1.4 版本开始支持监听聊天室成员变化。
IMLib SDK 在 RCChatRoomClient 中提供 RCChatRoomMemberDelegate 协议,支持在当前客户端监听所在聊天室中其它成员的加入、退出行为。
开通服务
您可以在需先按控制台内嵌指南嵌入到管理后台的 IM 服务功能配置页面(page_code: im_service_config)中,进入 聊天室 > 聊天室成员变化监听,开启此功能。开启后,用户加入、退出聊天室后,系统会使用消息的方式向聊天室中的其他成员发送回调通知,消息量会因此增加。
设置聊天室成员变化代理委托
从 5.6.7 版本开始,IMLib SDK 新增返回 RCChatRoomMemberActionModel 对象的代理方法,其中增加了当前聊天室人数。
示例代码
[RCChatRoomClient sharedChatRoomClient].memberDelegate = self;
#pragma mark - RCChatRoomMemberDelegate
- (void)memberDidChange:(NSArray<RCChatRoomMemberAction *> *)members inRoom:(NSString *)roomId {
// Handle the member change with the array of RCChatRoomMemberAction objects and the roomId
}
// Since: 5.6.7
- (void)memberDidChange:(RCChatRoomMemberActionModel *)actionModel {
}
/**
- Since: 5.6.7
*/
- (void)memberDidChange:(RCChatRoomMemberActionModel *)actionModel {
// Handle the member change with the RCChatRoomMemberActionModel object
NSString *roomId = actionModel.roomId;
NSArray<RCChatRoomMemberAction *> *chatRoomMemberActions = actionModel.chatRoomMemberActions;
NSUInteger memberCount = actionModel.memberCount;
for (RCChatRoomMemberAction *action in chatRoomMemberActions) {
// Access the properties of RCChatRoomMemberAction object
NSString *memberId = action.memberId;
RCChatRoomMemberActionType actionType = action.action;
if (actionType == RCChatRoomMemberActionType_Join) {
NSLog(@"Action Type: Join");
} else if (actionType == RCChatRoomMemberActionType_Quit) {
NSLog(@"Action Type: Leave");
}
}
}
聊天室中有其他用户加入或退出时,SDK 会同时触发两个 memberDidChange 方法,都在子线程回调。RCChatRoomMemberAction 列表中包含了当前聊天室中加入或退出聊天室的成员信息。RCChatRoomMemberActionModel 额外封装了聊天室当前人数(指已加入未退出的人数)。推荐使用返 回 RCChatRoomMemberActionModel 对象的代理方法。
如果当前用户由于网络原因和聊天室断开连接,则无法监听到断开连接期间的其他成员的加入、退出行为。
监听聊天室事件通知
IMLib SDK 从 5.4.5 版本开始支持监听聊天室事件通知。
设置聊天室事件通知代理委托
示例代码
[[RCChatRoomClient sharedChatRoomClient] addChatRoomNotifyEventDelegate:self];
方法说明
要从融云服务端接收当前聊天室中成员禁言、封禁相关的信息,以及当前用户在其他端加入、退出聊天室相关的信息,您可以通过 RCChatRoomClient 的 addChatRoomNotifyEventDelegate 方法添加一个RCChatRoomNotifyEventDelegate 代理。
| 代理方法 | 触发时机 |
|---|