SDKsiOS
获取会话列表
分页获取当前用户的会话列表,并通过 delegate 合并后续变化。
会话列表属于当前登录用户。每条 OIMConversationInfo 都包含会话标识、未读数、最后一条消息、置顶和草稿等状态。所有场景都使用分页接口读取会话,不调用非分页的完整列表方法。
分页获取会话
offset 是起始位置,count 是本页数量;第一页从 0 开始:
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
offset | NSInteger | 起始偏移量,第一页传 0。 |
count | NSInteger | 本次读取数量,应使用固定页大小。 |
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 进行幂等合并。账号级别的总未读数变化由获取消息总未读数统一监听,输入状态由上报输入状态负责。
请勿使用已加入群组列表替代群会话列表:用户可能已加入群组但尚未产生消息会话,也可能退群后仍保留着历史会话快照。
这个页面有帮助吗?