跳到主要内容

小程序集成

平台与前置条件​

微信、支付宝、抖音入口位于 platforms/miniprogram/wechat、alipay、douyin。三端复用共享 Headless 与 Rust Core,平台入口装配原生 HTTP、IM 和 Worker。

源码分包要求宿主提供 monotonicNowMs,并配置 Worker、WASM 和供应商适配器。目标基础库的单调时钟、音视频、音频路由和多人课堂兼容性需在开发者工具及真机上测试。

构建分包​

在 edu-sdks 根目录运行:

make build-wasm
make build-headless-mp

分发时保留平台入口、共享 JS、core.worker.js、WASM 及其引用的 Adapter 文件关系。将它们加入宿主分包和 Worker 配置。下面的 require、Worker 与 WASM 路径需按实际目录调整。

初始化​

const { createEduSdk } = require('./edusdk/index');

async function connectClassroom(entry, hostMonotonicNowMs) {
const sdk = createEduSdk({
appId: entry.appId,
backendUrl: entry.backendUrl,
userToken: entry.userToken,
wasmPath: '/subpackages/edusdk/edusdk_core.wasm.br',
workerPath: 'subpackages/edusdk/core.worker.js',
monotonicNowMs: hostMonotonicNowMs,
});
sdk.on('onError', (error) => console.error(error.code));
try {
await sdk.initialize({
classroomId: entry.classroomId,
userId: entry.userId,
displayName: entry.displayName,
});
} catch (error) {
sdk.destroy();
throw error;
}
return sdk;
}

hostMonotonicNowMs 返回有限、非负、非递减的毫秒值,且在实例生命周期内保持连续。应使用目标基础库支持的单调时钟;Date.now() 受系统时间调整影响,计时器累计也不能作为替代。

共享 TypeScript 入口在 initialize 中接收课堂并进课。Web 风格的全局 fetch、DOM API 和浏览器存储不适用于小程序宿主。

平台差异​

平台原生请求端口集成注意
微信wx.request配置请求、下载、WebSocket 域名与 Worker 路径
支付宝my.request共享适配层处理原生 fail 回调与 HTTP 状态,业务不要自行改写请求
抖音tt.request请求适配层使用原始响应文本交给共享执行器

把实际 backendUrl 加入 request 和 downloadFile 允许域名;IM WebSocket、白板和资源域名使用进课响应的地址。SDK 提示音从 backendUrl 下的固定公开资源下载,不携带用户 Token。

离开页面时调用 await sdk.leaveClassroom(),并在 finally 中调用 sdk.destroy()。分发包需包含共享 JS、WASM、Worker 和所用供应商适配器。