小程序集成
平台与前置条件
微信、支付宝、抖音入口位于 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 和所用供应商适配器。