浏览 SDKs · iOS
平台
SDKsiOS

获取会话列表

分页获取当前用户的会话列表,并通过 delegate 合并后续变化。

复制

会话列表属于当前登录用户。每条 OIMConversationInfo 都包含会话标识、未读数、最后一条消息、置顶和草稿等状态。所有场景都使用分页接口读取会话,不调用非分页的完整列表方法。

分页获取会话

offset 是起始位置,count 是本页数量;第一页从 0 开始:

参数说明

参数类型说明
offsetNSInteger起始偏移量,第一页传 0。
countNSInteger本次读取数量,应使用固定页大小。
NSInteger pageSize = 50;
[[OIMManager manager] getConversationListSplitWithOffset:0
                                                   count:pageSize
                                               onSuccess:^(NSArray<OIMConversationInfo *> *items) {
                                                   [conversationStore mergeByConversationID:items ?: @[]];
                                               }
                                               onFailure:^(NSInteger code, NSString *message) {
                                                   NSLog(@"getConversationListSplit failed: %ld %@", (long)code, message);
                                               }];

状态以 conversationID 为合并标识。

返回结果

成功回调 onSuccess 返回包含会话信息对象的数组 NSArray<OIMConversationInfo *> *。返回空数组或数量小于 count 时表示已拉取到列表末尾。

继续加载下一页时,按已请求并成功返回的条目数量推进 offset,并在本地以 conversationID 进行幂等去重合并。用户主动下拉刷新时,应清空本地旧分页游标并从 0 重新读取第一页。

保持列表同步

分页查询用于建立首次渲染的会话数据快照,OIMConversationListener 负责接收后续新增会话或会话属性变更通知。SDK 初始化成功后添加监听器;OIMCallbacker 对监听器使用弱引用管理,应用应使用强属性保留该监听实例,并在退出登录或账号作用域结束时移除:

@interface ConversationListSync : NSObject <OIMConversationListener>
@end

@interface ConversationListController ()
@property (nonatomic, strong) ConversationListSync *conversationListSync;
@end

@implementation ConversationListSync
- (void)onNewConversation:(NSArray<OIMConversationInfo *> *)items {
    [conversationStore mergeByConversationID:items];
}
- (void)onConversationChanged:(NSArray<OIMConversationInfo *> *)items {
    [conversationStore mergeByConversationID:items];
}
@end

ConversationListSync *sync = [ConversationListSync new];
self.conversationListSync = sync;
[[OIMManager callbacker] addConversationListener:sync];

// 账号注销或控制器销毁时:
[[OIMManager callbacker] removeConversationListener:self.conversationListSync];
self.conversationListSync = nil;

各端收到事件后均按 conversationID 进行幂等合并。账号级别的总未读数变化由获取消息总未读数统一监听,输入状态由上报输入状态负责。

请勿使用已加入群组列表替代群会话列表:用户可能已加入群组但尚未产生消息会话,也可能退群后仍保留着历史会话快照。