会话置顶
会话置顶功能提供以下能力:
- 在会话列表中置顶会话:通过会话(
RCConversation
)的置顶(isTop
)属性控制。 - 在携带同一标签的会话中置顶(需配合使用会话标签功能):通过 RCConversationTagInfo 类的
isTop
属性控制。
在会话列表中置顶会话
设置指定会话在会话列表中置顶后,SDK 将修改 RCConversation 的 isTop
字段,该状态将会被同步到服务端。融云会在为用户自动同步会话置顶的状态数据。客户端可以主动获取或通过监听器获取到最新数据。
设置会话置顶
使用 setConversationToTop:targetId:isTop:completion: 设置会话置顶。
// Set the conversation type and target ID
RCConversationType conversationType = ConversationType_PRIVATE;
NSString *targetId = @"your_target_id";
// Set the conversation to top or not
BOOL isTop = YES;
[[RCCoreClient sharedCoreClient] setConversationToTop:conversationType
targetId:targetId
isTop:isTop
completion:^(BOOL success) {}];
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型,支持单聊、群聊、系统会话。 |
targetId | NSString | 会话 id |
isTop | BOOL | 是否置顶 |
completion | Block | 设置置顶结果回调 |
客户端通过本地消息数据自动生成会话与会话列表,并会在用户登录的多个设备之间同步置顶状态。如果在调用该 API 时,要置顶的会话在本地或该用户登录的其他设备上不存在(会话尚未生成,或者已被移除),SDK SDK 将直接创建会话并置顶。
设置会话置顶可选择是否更新会话时间
使用 [setConversationToTop:targetId:isTop:needUpdateTime:completion:] 设置会话置顶。
// Set the conversation type and target ID
RCConversationType conversationType = ConversationType_PRIVATE;
NSString *targetId = @"your_target_id";
// Set the conversation to top or not
BOOL isTop = YES;
[[RCCoreClient sharedCoreClient] setConversationToTop:conversationType
targetId:targetId
isTop:isTop
needUpdateTime:YES
completion:^(BOOL success) {}];
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型,支持单聊、群聊、系统会话。 |
targetId | NSString | 会话 id |
isTop | BOOL | 是否置顶 |
needUpdateTime | BOOL | 是否更新时间 |
completion | Block | 设置置顶结果回调 |
客户端通过本地消息数据自动生成会话与会话列表,并会在用户登录的多个设备之间同步置顶状态。如果在调用该 API 时,要置顶的会话在本地或该用户登录的其他设备上不存在(会话尚未生成,或者已被移除),SDK 将直接创建会话并置顶。
获取是否置顶
- 从 5.1.5 版本开始支持该功能。
- 从 5.3.0 版本
RCCoreClient
开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。
主动获取指定会话的置顶状态。
RCConversationIdentifier *iden = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:@"targetId"];
[[RCCoreClient sharedCoreClient] getConversationTopStatus:iden completion:^(BOOL){
//异步回调,是否获取成功
}];
参数 | 类型 | 说明 |
---|---|---|
conversationIdentifier | RCConversationIdentifier | 会话标识,需要指定会话类型(RCConversationType)和 Target ID。 |
completion | Block | 返回是否设置成功。 |
获取置顶会话列表
主动获取指定会话类型的所有置顶会话。
NSArray *conversations = [[RCIMClient sharedRCIMClient] getTopConversationList:@[@(ConversationType_PRIVATE),@(ConversationType_GROUP)]];
参数 | 类型 | 说明 |
---|---|---|
conversationTypes | NSArray | 会话类型的数组,需要将 RCConversationType 转为 NSNumber 构建 Array |
获取成功后,返回 会话 RCConversation
的列表。
在携带标签的所有会话中置顶会话
该功能相关接口仅在 RCCoreClient
中提供。在标签标记的所有会话中置顶是通过修改 RCConversationTagInfo.isTop
字段实现的,不影响 RCConversation 的 isTop
字段。
如果 App 实现了会话标签功能,App 用户可能会使用同一个标签标记多个会话,并且需要将其中一个会话置顶。SDK 在 RCConversationTagInfo 中提供 isTop
字段,用于控制会话在携带同样标签的会话中的置顶状态。
在标签下置顶会话
在携带指定标签的所有会话中设置指定会话置顶。例如,在所有添加了「培训班」标签的会话中将与「Tom」的私聊会话置顶。
NSString targetId = @"useridoftom";
NSString *tagId = @"peixunban";
RCConversationIdentifier *iden = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:targetId];
[[RCCoreClient sharedCoreClient] setConversationToTopInTag:tagId conversationIdentifier:iden isTop:isTop success:^{
} error:^(RCErrorCode errorCode) {
}];
参数 | 类型 | 说明 |
---|---|---|
tagId | String | 标签 ID |
conversationIdentifier | RCConversationIdentifier | 会话标识,需要指定会话类型(RCConversationType)和 Target ID。 |
isTop | BOOL | 是否置顶 |
successBlock | Block | 成功回调 |
errorBlock | Block | 失败回调。errorCode 参数返回 RCErrorCode。 |
获取会话在标签下的置顶状态
从 5.3.0 版本 RCCoreClient
开始,建议使用下方异步返回结果的接口,原同步接口同时废弃。
查询指定会话是否在携带同一标签的所有会话中置顶。获取成功后会返回是否已置顶。
RCConversationIdentifier *iden = [[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE targetId:@"targetId"];
[[RCCoreClient sharedCoreClient] getConversationTopStatusInTag:iden tagId:@"tagId" completion:^(BOOL){
// 异步回调,返回置顶状态
}];
参数 | 类型 | 说明 |
---|---|---|
tagId | NSString | 标签 ID |
conversationIdentifier | RCConversationIdentifier | 会话标识,需要指定会话类型(RCConversationType)和 Target ID。 |
completion | Block | 异步回调,返回是否置顶 |
是否开启同步空置顶会话(SDK 版本 ≧ 5.10.0)
卸载重装或者换设备登录后,置顶状态的会话会在会话列表中显示,包括已置顶的空会话。
从 5.10.0 版本开始,支持是否开启同步空置顶会话功能。
可在 SDK 初始化时通过 RCInitOption
的 enableSyncEmptyTopConversation
属性设置 是否开启。如不设置,SDK 默认不自动同步空置顶会话。
注意 如果开启同步空置顶会话功能,那么分页获取会话数据时,第一页 startTime 传 0,后续传会话对象
operationTime
的值。
RCInitOption *initOption = [[RCInitOption alloc] init];
// 打开同步空置顶会话
initOption.enableSyncEmptyTopConversation = YES;
// 初始化 SDK
[[RCCoreClient sharedCoreClient] initWithAppKey:@"your_appkey" option:initOption];