事件概览
注册 OpenIM iOS SDK listener,并按业务生命周期同步连接与数据状态。
OpenIM iOS SDK 按领域定义 listener protocol。应用通过 [OIMManager callbacker] 添加和移除 listener,并由业务状态层强引用 listener 对象;callbacker 对这些对象使用弱引用。
注册生命周期
| 事件范围 | Protocol | 对应页面 |
|---|---|---|
| 连接和 token | 初始化时传入的连接 blocks | 认证与管理登录会话 |
| 用户、好友和黑名单 | OIMUserListener、OIMFriendshipListener | 用户概览 |
| 会话和同步 | OIMConversationListener | 获取会话列表 |
| 会话分组 | Open_im_sdk_callbackOnConversationGroupListener | 会话分组概览 |
| 群组和群成员 | OIMGroupListener | 群组概览 |
| 消息 | OIMAdvancedMsgListener | 接收消息 |
| 自定义业务通知 | OIMCustomBusinessListener | 接收自定义业务消息 |
| 音视频通话 | OIMSignalingListener | 通话事件 |
在 initSDK 成功后、login 前注册应用级 listener。不要在视图每次渲染或出现时重复添加;退出登录、切换账号或销毁状态层时,用同一实例调用对应的 remove...Listener:。
会话分组是例外:它由 OpenIMCore 的 Open_im_sdkSetConversationGroupListener 设置单一 Open_im_sdk_callbackOnConversationGroupListener,不经过 [OIMManager callbacker],也不是可重复添加的 OIMCallbacker listener。应用应由会话状态层长期持有 callback 对象,并在 SDK 生命周期内只设置一次;完整 callback 与 JSON 载荷见会话分组概览。
监听初始化同步
同步生命周期属于 OIMConversationListener。本页是四个同步 callback 的完整实现归属页:
@interface SDKSyncStore () <OIMConversationListener>
@end
@implementation SDKSyncStore
- (void)startListening {
[[OIMManager callbacker] addConversationListener:self];
}
- (void)stopListening {
[[OIMManager callbacker] removeConversationListener:self];
}
- (void)onSyncServerStart:(BOOL)reInstall {
[self setSyncingWithProgress:0 reInstall:reInstall];
}
- (void)onSyncServerProgress:(NSInteger)progress {
[self setSyncingWithProgress:progress reInstall:self.reInstallSync];
}
- (void)onSyncServerFinish:(BOOL)reInstall {
[self setSyncReadyWithReInstall:reInstall];
[self reloadVisibleSnapshots];
}
- (void)onSyncServerFailed:(BOOL)reInstall {
[self setSyncFailedWithReInstall:reInstall];
}
@endreInstall 为 YES 表示本地数据库重建后的同步,通常需要更完整的加载状态;onSyncServerProgress: 提供当前进度。完成后重新查询当前界面所需快照,再继续合并各领域 listener 的后续增量。
同步事件不是某个查询 API 的成功 callback,也没有业务实体合并键。同步完成、重新查询与后续事件增量应分别处理,并按当前 SDK 实例和登录用户隔离状态。
这个页面有帮助吗?