跳到主要内容

Electron 集成

Electron 使用 @eduskit/sdk-electron 和 @eduskit/ui-electron,当前 npm 发布版本为 0.1.1。官方课堂界面复用 Web UI,IM、RTC 使用 Electron 原生适配层。

npm install @eduskit/sdk-electron@0.1.1 @eduskit/ui-electron@0.1.1 vue@^3.5.0

进程职责​

位置内容
main创建窗口,取得本次课堂配置,按白名单提供 IPC
preload取得用户 Token,读取 WASM,创建 Headless,装配原生 Adapter,暴露受限 API
renderer通过 window.eduSdk 挂载课堂页面、读取快照和发出操作

窗口开启 contextIsolation: true、关闭 nodeIntegration。源码示例将用户 Token 保存在 preload,renderer 通过受限 API 访问 SDK。原始音视频帧由供应商原生渲染路径处理,不通过业务 IPC 传递。

界面入口​

以下挂载代码位于源码示例 examples/desktop-electron/src/renderer.ts,需要先完成 preload 配置:

import { ElectronEduClassroom, type ElectronRendererApi } from '@eduskit/ui-electron';

declare global {
interface Window {
eduSdk: ElectronRendererApi;
}
}

const config = window.eduSdk.bootstrap;
const container = document.getElementById('app');
if (!container || !config?.classroomId || !config.userId) {
throw new Error('Missing classroom container or preload configuration');
}
const classroom = ElectronEduClassroom.mount(
container,
{
classroomId: config.classroomId,
userId: config.userId,
appId: config.appId,
displayName: config.displayName,
themeMode: 'system',
},
window.eduSdk,
);
window.addEventListener('beforeunload', () => classroom.destroy());

preload 的完整装配需参考同目录 preload.ts:createElectronRuntime(wasm) → createElectronEduSdk(options, runtime) → exposeElectronSdk(...)。其中 IM 和 RTC 创建函数来自 @eduskit/sdk-electron/native。

源码示例​

在 edu-sdks 根目录:

make build-wasm
npm --prefix examples/desktop-electron install
npm --prefix examples/desktop-electron run dev

在示例目录配置 EDUSDK_USER_ID、EDUSDK_CLASSROOM_ID、EDUSDK_USER_TOKEN,可选 EDUSDK_APP_ID、EDUSDK_BACKEND_URL、EDUSDK_DISPLAY_NAME。源码示例默认开发环境,打包默认生产环境;实际值以进课配置为准。

Windows 与 macOS 分别安装和打包对应的原生依赖,确保 Electron ABI、CPU 架构、WASM、原生库和资源路径一致。上述源码示例包含晚于 npm 0.1.1 的 Worker 改动,需要使用同一构建的 Headless 与 UI Kit。