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