跳到主要内容

加入聊天室

加入聊天室分为以下几种情况:

  • (推荐)应用程序后端通过即时通讯服务端 API 创建聊天室,将聊天室 ID 下分发至客户端。客户端获取聊天室 ID 后可加入聊天室。
  • (已废弃)应用程序通过直接调用客户端 SDK 加入聊天室方法,创建并加入该聊天室。这种方式已不推荐,相关 API 已于 5.6.3 版本废弃,未来可能会删除。
  • SDK 断网重连后会自动重新加入聊天室,不需要应用程序处理。

应用程序后端可以通过提前注册服务端回调聊天室状态同步,收取聊天室创建成功与成员加入等事件通知。客户端可以通过监听聊天室事件收取相关通知。

局限

  • 默认同一用户不能同时加入多个聊天室。用户加入新的聊天室后会自动退出之前的聊天室。您可以在融云控制台的免费基础功能页面,开启单个用户加入多个聊天室
  • 客户端的加入聊天室方法允许在加入时获取最新的历史消息(默认 10 条,最多 50 条),但不支持指定消息类型。您可以在融云控制台的免费基础功能页面,开启加入聊天室获取指定消息配置,限制加入聊天室时只获取指定类型的消息。

加入已存在的聊天室

提示

IMLib 从 5.6.3 开始新增方法,支持在成功回调中返回 RCJoinChatRoomResponse,其中包含聊天室的创建时间、成员数量、聊天室禁言状态、用户禁言状态等信息。

如果 IMLib 版本 ≧ 5.6.3,可使用 RCChatRoomClientjoinExistChatRoom: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);
}];
参数类型说明
targetIdNSString聊天室会话 ID,最大长度为 64 个字符。
messageCountint进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1,表示不获取任何历史消息。如果传 0,表示使用 SDK 默认设置(默认为获取 10 条)。
successBlockBlock加入聊天室成功的回调。response 中返回 RCJoinChatRoomResponse 对象,其中包含聊天室的基础信息,以及当前用户在聊天室的状态信息。
errorBlockBlock加入聊天室失败的回调。status 中返回错误码 RCErrorCode

如果 IMLib 版本 < 5.6.3,可使用 RCChatRoomClientjoinExistChatRoom:messageCount:success:error: 方法加入已存在的聊天室。该方法在 5.6.3 版本上已废弃。

[[RCIMClient sharedRCIMClient] joinExistChatRoom:@"chatroomId" messageCount:20 success:^{

} error:^(RCErrorCode status) {

}];
参数类型说明
targetIdNSString聊天室会话 ID,最大长度为 64 个字符。
messageCountint进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1,表示不获取任何历史消息。如果传 0,表示使用 SDK 默认设置(默认为获取 10 条)。
successBlockBlock加入聊天室成功的回调
errorBlockBlock加入聊天室失败的回调。status 中返回错误码 RCErrorCode

加入聊天室

提示

IMLib 从 5.6.3 开始废弃该方法。

joinChatRoom 接口会创建并加入聊天室。如果聊天室已存在,则直接加入。如果您使用了服务端回调聊天室状态同步,融云会将聊天室创建成功的通知发送到您指定的服务器地址。

[[RCIMClient sharedRCIMClient] joinChatRoom:@"chatroomId" messageCount:20 success:^{

} error:^(RCErrorCode status) {

}];
参数类型说明
targetIdNSString聊天室 ID,最大长度为 64 个字符。
messageCountint进入聊天室时获取历史消息的数量,数量范围:1-50。如果传 -1,表示不获取任何历史消息。如果传 0,表示使用 SDK 默认设置(默认为获取 10 条)。
successBlockBlock加入聊天室成功的回调
errorBlockBlock加入聊天室失败的回调。status 中返回错误码 RCErrorCode

断线重连后重新加入聊天室

SDK 具备断线重连机制。重连成功后,如果当前登录用户曾经加入过聊天室,且没有退出,则 SDK 会自动重新加入聊天室,不需要 App 处理。App 可以通过监听聊天室状态收到通知。

提示

断网重连的场景下,一旦 SDK 重新加入聊天室成功,会自动收取一定数量的聊天室消息。

  • 如果 SDK 版本 < 5.3.1,SDK 不会拉取消息。
  • 如果 SDK 版本 ≧ 5.3.1,SDK 会按照加入聊天室时传入的 messageCount 拉取固定数量的消息。拉取的消息有可能在本地已存在,App 可能需要进行排重后再显示。