加入聊天室
加入聊天室分为以下几种情况:
- (推荐)应用程序后端通过即时通讯服务端 API 创建聊天室,将聊天室 ID 下分发至客户端。客户端获取聊天室 ID 后可加入聊天室。
- (已废弃)应用程序通过直接调用客户端 SDK 加入聊天室方法,创建并加入该聊天室。这种方式已不推荐,相关 API 已于 5.6.3 版本废弃,未来可能会删除。
- SDK 断网重连后会自动重新加入聊天室,不需要应用程序处理。
应用程序后端可以通过提前注册服务端回调聊天室状态同步,收取聊天室创建成功与成员加入等事件通知。客户端可以通过监听聊天室事件收取相关通知。
局限
- 默认同一用户不能同时加入多个聊天室。用户加入 新的聊天室后会自动退出之前的聊天室。您可以在融云控制台的免费基础功能页面,开启单个用户加入多个聊天室。
- 客户端的加入聊天室方法允许在加入时获取最新的历史消息(默认 10 条,最多 50 条),但不支持指定消息类型。您可以在融云控制台的免费基础功能页面,开启加入聊天室获取指定消息配置,限制加入聊天室时只获取指定类型的消息。
加入已存在的聊天室
提示
IMLib 从 5.6.3 开始新增方法,支持在成功回调中返回 RCJoinChatRoomResponse, 其中包含聊天室的创建时间、成员数量、聊天室禁言状态、用户禁言状态等信息。
如果 IMLib 版本 ≧ 5.6.3,可使用 RCChatRoomClient 的 joinExistChatRoom:messageCount:successBlock:errorBlock: 方法加入一个已存在的聊天室。
[[RCChatRoomClient sharedChatRoomClient] joinExistChatRoom:@"your_chat_room_id"
messageCount:-1
successBlock:^(RCJoinChatRoomResponse *response) {
NSLog(@"Successfully joined the chat room");
// 创建时间(毫秒时间戳)
long long createTime = response.createTime;
// 成员数量
NSInteger memberCount = response.memberCount;
// 是否全局禁言
BOOL isAllChatRoomBanned = response.isAllChatRoomBanned;
// 是否当前用户被禁言
BOOL isCurrentUserBanned = response.isCurrentUserBanned;
// 当前用户是否在此聊天室被禁言
BOOL isCurrentChatRoomBanned = response.isCurrentChatRoomBanned;
// 当前用户是否在此聊天室的白名单中
BOOL isCurrentChatRoomInWhitelist = response.isCurrentChatRoomInWhitelist;
// 加入聊天室时间(从 5.10.2 版本开始支持)
BOOL joinTime = response.joinTime;
}
errorBlock:^(RCErrorCode status) {
NSLog(@"Failed to join the chat room. Error code: %ld", (long)status);
}];
参数 | 类型 | 说明 |
---|---|---|
targetId | NSString | 聊天室会话 ID,最大长度为 64 个字符。 |
messageCount | int | 进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1 ,表示不获取任何历史消息。如果传 0 ,表示使用 SDK 默认设置(默认为获取 10 条)。 |
successBlock | Block | 加入聊天室成功的回调。response 中返回 RCJoinChatRoomResponse 对象,其中包含聊天室的基础信息,以及当前用户在聊天室的状态信息。 |
errorBlock | Block | 加入聊天室失败的回调。status 中返回错误码 RCErrorCode。 |
如果 IMLib 版本 < 5.6.3,可使用 RCChatRoomClient
的 joinExistChatRoom:messageCount:success:error: 方法加入已存在的聊天室。该方法在 5.6.3 版本上已废弃。
[[RCIMClient sharedRCIMClient] joinExistChatRoom:@"chatroomId" messageCount:20 success:^{
} error:^(RCErrorCode status) {
}];
参数 | 类型 | 说明 |
---|---|---|
targetId | NSString | 聊天室会话 ID,最大长度为 64 个字符。 |
messageCount | int | 进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1 ,表示不获取任何历史消息。如果传 0 ,表示使用 SDK 默认设置(默认为获取 10 条)。 |
successBlock | Block | 加入聊天室成功的回调 |
errorBlock | Block | 加入聊天室失败的回调。status 中返回错误码 RCErrorCode。 |
加入聊天室
提示
IMLib 从 5.6.3 开始废弃该方法。
joinChatRoom
接口会创建并加入聊天室。如果聊天室已存在,则直接加入。如果您使用了服务端回调聊天室状态同步,融云会将聊天室创建成功的通知发送到您指定的服务器地址。
[[RCIMClient sharedRCIMClient] joinChatRoom:@"chatroomId" messageCount:20 success:^{
} error:^(RCErrorCode status) {
}];
参数 | 类型 | 说明 |
---|---|---|
targetId | NSString | 聊天室 ID,最大长度为 64 个字符。 |
messageCount | int | 进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1 ,表示不获取任何历史消息。如果传 0 ,表示使用 SDK 默认设置(默认为获取 10 条)。 |
successBlock | Block | 加入聊天室成功的回调 |
errorBlock | Block | 加入聊天室失败的回调。status 中返回错误码 RCErrorCode。 |
断线重连后重新加入聊天室
SDK 具备断线重连机制。重连成功后,如果当前登录用户曾经加入过聊天室,且没有退出,则 SDK 会自动重新加入聊天室,不需要 App 处理。App 可以通过监听聊天室状态收到通知。
提示
断网重连的场景下,一旦 SDK 重新加入聊天室成功,会自动收取一定数量的聊天室消息。
- 如果 SDK 版本 < 5.3.1,SDK 不会拉取消息。
- 如果 SDK 版本 ≧ 5.3.1,SDK 会按照加入聊天室时传入的
messageCount
拉取固定数量的消息。拉取的消息有可能在本地已存在,App 可能需要进行排重后再显示。