macOS IMKit 快速开始

本页在 5 个步骤内完成 macOS 端 IMKit 接入:先接入 IMLib,再初始化门面,最后挂载会话列表与会话页。IMKit 只消费 IMLib 的公开数据,不重复实现通信能力。

  1. 接入 IMLib

    按 IMLib 快速开始 完成初始化与连接;IMKit 不重复建立连接。

  2. 导入 IMKit

    按「导入 SDK」安装依赖;只依赖 @ni-paas/im-electron 公开 API;禁止 import 传输层/REST/DB;契约校验器静态扫描 import 面

  3. 初始化门面

    初始化 IMLib 客户端并连接,然后创建 IMKit 门面(或调用静态 init);门面持有主题、语言与组件实例。

  4. 挂载会话列表

    传入 conversations 与交互回调;会话数据来自 IMLib 的 getConversationList 与 CONVERSATION 事件。

  5. 挂载会话页与输入区

    传入 messages / currentUserId / hasMore;发送与已读回调转调 IMLib 对应接口。

1. 接入 IMLib​

IMKit 的所有数据都来自 IMLib 公开接口:连接、会话列表、历史消息、发送、已读回执与未读清零。先完成 IMLib 接入再使用 IMKit。

2. 导入 IMKit​

npm(宿主渲染)
# SDK 当前未发布到 npm(@0.1.0 远程 404),从仓库本地安装:
npm install @ni-paas-im/electron@file:../sdk/electron
# preload 桥:@ni-paas-im/electron/preload(页面得到 window.niPaasIMBridge)
# 类型声明:@ni-paas-im/electron/types/index.d.ts

3. 初始化门面​

JavaScript(宿主渲染)
// 渲染进程:宿主自渲染,SDK 只提供数据与事件
const im = window.niPaasIMBridge.imlib;

const conversations = await im.getConversationList();
renderConversationList(conversations.data);          // 宿主自己的列表 UI

window.niPaasIMBridge.onEvent(({ event, payload }) => {
  if (event === 'MESSAGES') renderMessages(payload.messages);
});

门面:宿主渲染(SDK 不导出组件);SDK 不提供组件挂载 API 或组件类;按下表契约自渲染。主进程与桥的完整接线见 macOS「快速开始」。

4. 挂载会话列表​

JavaScript(宿主渲染)
// macOS:宿主自渲染 ConversationListView(SDK 不导出该组件)
// 契约 props:conversations, activeTargetId?, theme?, options?
const res = await window.niPaasIMBridge.imlib.getConversationList();
document.getElementById('app').innerHTML = res.data
  .map((c) => `<div class="conv" data-target="${c.targetId}">${c.targetId} · ${c.unreadCount || 0}</div>`)
  .join('');

5. 挂载会话页与输入区​

JavaScript(宿主渲染)
// macOS:宿主自渲染 ChatView(SDK 不导出该组件)
// 契约 props:conversationType, targetId, messages, currentUserId
const res = await window.niPaasIMBridge.imlib.getHistoryMessages(1, 'user2', 50, 0);
document.getElementById('messages').innerHTML = res.data
  .map((m) => `<div class="msg">${m.content?.text || '[' + m.content?.type + ']'}</div>`)
  .join('');

下一步​