浏览 SDKs · iOS
SDKsiOS

获取会话列表

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

复制

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

分页获取会话

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

参数说明

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

成功 callback 的数组声明为 nullable,没有数据时按空数组处理。继续加载时按已经请求的条目数量推进 offset,按 conversationID 去重;返回数量小于 count 时表示已经到达末尾。用户主动刷新时清空旧分页状态并从 0 重新读取。

保持列表同步

查询建立快照,OIMConversationListener 合并后续新增和属性变化。SDK 初始化成功后、调用登录前添加 listener;OIMCallbacker 对 listener 是弱引用,应用必须用强属性保留同一实例,并在账号作用域结束时用该实例移除:

@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 幂等合并。总未读数由维护总未读数负责,输入状态由上报输入状态负责。

不要用已加入群组列表替代会话列表。用户可能已经加入群组但尚未产生对应会话,也可能退出群组后仍保留历史会话记录。