接收消息
通过 MESSAGES 事件接收在线消息;离线期间的消息在连接建立后由服务端补发,客户端按会话聚合。
事件驱动
接收消息通过事件完成,事件名来自 capabilityModel.events。事件常量来自 Events;主进程 client.addEventListener,渲染进程用 window.niPaasIMBridge.onEvent(({event,payload,seq,ts}) => ...) 接收。
消息事件载荷
| 字段 | 类型 | 说明 |
|---|---|---|
messages | Message[] | 收到的消息列表(可能包含离线补发与多端同步消息) |
监听消息(本平台)
JavaScript (ESM)
// 主进程:SDK 已把事件广播到订阅窗口;这里只做宿主侧处理(通知/托盘/角标)
service.client.addEventListener(Events.MESSAGES, ({ messages }) => {
console.log('[main] messages', messages.length);
});
// 渲染进程:window.niPaasIMBridge.onEvent 接收 {event,payload,seq,ts}
const off = window.niPaasIMBridge.onEvent(({ event, payload }) => {
if (event === 'MESSAGES') render(payload.messages);
});事件一览
| 事件 | 载荷 | 触发时机 |
|---|---|---|
CONNECTING | {attempt:int} | 开始连接(含重连尝试) |
CONNECTED | {userId:string, sessionId?:string} | 连接成功且离线补发完成 |
DISCONNECT | {code:int, reason:string} | 连接断开(含错误码与原因) |
SUSPEND | {code:int, reason:string} | 服务端挂起连接(多端互踢等) |
MESSAGES | {messages:Message[]} | 收到在线 / 离线补发消息 |
CONVERSATION | {conversation:Conversation} | 会话变更(未读、置顶、草稿等) |
MESSAGE_RECALLED | {message:Message} | 消息被撤回 |
READ_RECEIPT | ReadReceipt | 已读回执更新 |
TYPING | {conversationType:ConversationType,targetId:string,userId:string,typing:bool,timestamp:int64} | 对方正在输入 |
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_CHANGED | {messageId:string,conversationType:ConversationType,targetId:string,updated:Record<string,string>?,removed:string[]?,timestamp:int64} | |
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_CHANGED | {userId:string,online:bool,lastSeenAt:int64,timestamp:int64,reason:connect|disconnect|kick|deactivate} | |
FRIEND_EVENT | {kind:FriendEventKind,request?:FriendRequest,fromUserId?:string,toUserId?:string,timestamp:int64} | 好友申请 / 同意 / 拒绝 |
CHATROOM_EVENT | {chatroomId:string,kind:ChatroomEventKind,userId?:string,onlineCount?:uint32,chatroom?:Chatroom,timestamp:int64} | 聊天室加入 / 离开 / 销毁 / 成员变化 |
KICKED | {code:int,reason:string} | 被踢下线 |
接收语义
- 在线消息实时推送;离线期间的消息在 connect 的 hello 之后自动补发,补发完成后触发 CONNECTED。
- 同一消息可能因多端同步重复到达,客户端需按 clientMsgId / messageId 去重(协议可靠性约定)。
- 消息按会话聚合:收到 MESSAGES 后更新会话未读与最后一条消息,排序规则见会话列表。
- 撤回通过 MESSAGE_RECALLED 事件通知,客户端替换占位而不是删除消息。