IMPEvent 监听器(iOS IMLib)

类继承图​

Object→IMPEvent

继承关系:Object → IMPEvent。监听器由 SDK 事件总线实现;业务代码只需注册回调,不需要继承。

类说明​

IMPEvent 定义 iOS IMLib 的 16 个事件与事件载荷。通过 addEventListener 注册、removeEventListener 移除;同一 handler 重复注册只生效一次,页面销毁时务必移除监听。

项值
事件 APIaddEventListener(_ event: IMPEvent, listener: IMPEventListener) / removeEventListener(_ event:listener:)
事件常量IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)
事件数量16
载荷类型见下表
平台状态已交付

事件概要​

事件平台常量载荷说明
CONNECTINGIMPEvent.CONNECTING{attempt:int}连接建立中:每次建连/重连尝试时触发,载荷含重试次数 attempt。
CONNECTEDIMPEvent.CONNECTED{userId:string, sessionId?:string}连接建立成功:收到服务端 hello 之后触发,可开始发送请求。
DISCONNECTIMPEvent.DISCONNECT{code:int, reason:string}连接断开:主动断开、鉴权失败或放弃重连时触发。
SUSPENDIMPEvent.SUSPEND{code:int, reason:string}连接挂起:异常断开后 SDK 进入指数退避重连,期间业务请求会失败。
MESSAGESIMPEvent.MESSAGES{messages:Message[]}收到消息:在线消息与离线补发消息都通过该事件下发,载荷为 Message 列表。
CONVERSATIONIMPEvent.CONVERSATION{conversation:Conversation}会话变更:未读数、置顶、提醒级别、草稿或最后一条消息变化时触发。
MESSAGE_RECALLEDIMPEvent.MESSAGE_RECALLED{message:Message}消息被撤回:收到服务端撤回帧,载荷为被撤回的 Message。
READ_RECEIPTIMPEvent.READ_RECEIPTReadReceipt已读回执:收到对方已读上报,载荷为 ReadReceipt。
TYPINGIMPEvent.TYPING{conversationType:ConversationType,targetId:string,userId:string,typing:bool,timestamp:int64}输入状态:收到“正在输入”状态帧。
FRIEND_EVENTIMPEvent.FRIEND_EVENT{kind:FriendEventKind,request?:FriendRequest,fromUserId?:string,toUserId?:string,timestamp:int64}好友事件:好友请求、接受、拒绝等事件,载荷含 FriendRequest。
CHATROOM_EVENTIMPEvent.CHATROOM_EVENT{chatroomId:string,kind:ChatroomEventKind,userId?:string,onlineCount?:uint32,chatroom?:Chatroom,timestamp:int64}聊天室事件:成员加入/退出/被移出、成员变更、聊天室销毁。
KICKEDIMPEvent.KICKED{code:int,reason:string}被踢下线:多端互踢或账号封禁,SDK 不再自动重连。
MESSAGE_REACTION_CHANGEDIMPEvent.MESSAGE_REACTION_CHANGED{messageId:string,conversationType:ConversationType,targetId:string,reactionId:string,operation:added|removed|cleared,userId:string,reactionTime:int64,totalCount:uint32,users:string[]?}—
MESSAGE_EXPANSION_CHANGEDIMPEvent.MESSAGE_EXPANSION_CHANGED{messageId:string,conversationType:ConversationType,targetId:string,updated:Record<string,string>?,removed:string[]?,timestamp:int64}—
STREAM_MESSAGE_CHANGEDIMPEvent.STREAM_MESSAGE_CHANGED{streamId:string,messageId:string,conversationType:ConversationType,targetId:string,senderId:string,delta:string,seq:uint32,text:string,status:streaming|ended,complete:bool,timestamp:int64}—
PRESENCE_CHANGEDIMPEvent.PRESENCE_CHANGED{userId:string,online:bool,lastSeenAt:int64,timestamp:int64,reason:connect|disconnect|kick|deactivate}—

详细事件说明​

CONNECTING {attempt:int}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

连接建立中:每次建连/重连尝试时触发,载荷含重试次数 attempt。

CONNECTED {userId:string, sessionId?:string}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

连接建立成功:收到服务端 hello 之后触发,可开始发送请求。

DISCONNECT {code:int, reason:string}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

连接断开:主动断开、鉴权失败或放弃重连时触发。

SUSPEND {code:int, reason:string}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

连接挂起:异常断开后 SDK 进入指数退避重连,期间业务请求会失败。

MESSAGES {messages:Message[]}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

收到消息:在线消息与离线补发消息都通过该事件下发,载荷为 Message 列表。

CONVERSATION {conversation:Conversation}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

会话变更:未读数、置顶、提醒级别、草稿或最后一条消息变化时触发。

MESSAGE_RECALLED {message:Message}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

消息被撤回:收到服务端撤回帧,载荷为被撤回的 Message。

READ_RECEIPT ReadReceipt
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

已读回执:收到对方已读上报,载荷为 ReadReceipt。

TYPING {conversationType:ConversationType,targetId:string,userId:string,typing:bool,timestamp:int64}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

输入状态:收到“正在输入”状态帧。

FRIEND_EVENT {kind:FriendEventKind,request?:FriendRequest,fromUserId?:string,toUserId?:string,timestamp:int64}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

好友事件:好友请求、接受、拒绝等事件,载荷含 FriendRequest。

CHATROOM_EVENT {chatroomId:string,kind:ChatroomEventKind,userId?:string,onlineCount?:uint32,chatroom?:Chatroom,timestamp:int64}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

聊天室事件:成员加入/退出/被移出、成员变更、聊天室销毁。

KICKED {code:int,reason:string}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

被踢下线:多端互踢或账号封禁,SDK 不再自动重连。

MESSAGE_REACTION_CHANGED {messageId:string,conversationType:ConversationType,targetId:string,reactionId:string,operation:added|removed|cleared,userId:string,reactionTime:int64,totalCount:uint32,users:string[]?}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷
MESSAGE_EXPANSION_CHANGED {messageId:string,conversationType:ConversationType,targetId:string,updated:Record<string,string>?,removed:string[]?,timestamp:int64}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷
STREAM_MESSAGE_CHANGED {streamId:string,messageId:string,conversationType:ConversationType,targetId:string,senderId:string,delta:string,seq:uint32,text:string,status:streaming|ended,complete:bool,timestamp:int64}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷
PRESENCE_CHANGED {userId:string,online:bool,lastSeenAt:int64,timestamp:int64,reason:connect|disconnect|kick|deactivate}
IMPEvent(16 值枚举)+ IMPEventPayload(16 分支载荷联合体)事件载荷

注册与移除监听​

Swift
let listener = EventListener() // 实现 IMPEventListener
client.addEventListener(.messages, listener: listener)
client.removeEventListener(.messages, listener: listener)

相关链接​