有用户在体验了「Agora Flat 开源教室」之后反馈体验还不错,尤其是其中白板互动、PPT展示那一部分用起来很简单、也很方便。就过来问我们如何快速的将这一套白板互动、PPT展示系统引入到自己的产品里面。
Agora Flat 是我们去年发布的一个开源在线互动教室,感兴趣的朋友可以点击链接来体验。
本篇文章就来做一个接入演示,以 Web 端为例带大家快速接入 Fastboard,拥有一套白板互动系统。移动端接入 Fastboard 教程请移步文章末尾查看对应链接。
首先我们要知道每一个可以操作的白板都有一个房间的概念,在进入这个白板房间之前我们需要获取到这个房间的门牌号(Room uuid)和钥匙(Room Token)。
第一步、获取白板 Room uuid 和 Room Token
首先我们要有一个声网开发者账号,可以前往 https://console.agora.io 注册。登录成功后创建一个项目,在项目配置里面开通互动白板服务,如下图。
开通互动白板服务后,我们可以获取到白板配置信息,里面包括 AppId 和 SDK Token。
接下来我们就可以拿 AppId 和 SDK Token 来调用白板服务器创建房间。
执行如下代码,调用白板服务的 API 来创建房间:
var url = "https://api.netless.link/v5/rooms";
var requestInit = {
method: "POST",
headers: {
"content-type": "application/json",
region: "cn-hz", // 指定处理该请求的白板数据中心,此处选的是杭州
token: "NETLESSSDK_YWs9ZzdkR.......", // 签发的 SDK Token,需提前准备
},
};
window
.fetch(url, requestInit)
.then(function (response) {
return response.json();
})
.then(function (roomJSON) {
// 创建房间成功,获取描述房间信息的 roomJSON
console.log(roomJSON);
})
.catch(function (err) {
// 失败了,打印出 Error 以便分析为何失败
console.error(err);
});
如果执行成功,将创建一个实时互动房间。白板服务端会返回一个 JSON 形式的 object,来描述刚刚创建好的房间的信息。如下:
其中 uuid 就是我们需要的门牌号 Room uuid。
注意:建议在业务服务器上执行创建房间的操作,不要在前端或客户端上做。本章为了演示完整流程,用了前端的 window.fetch 方法调用白板服务端 API。请勿在正式 Web 应用中效仿此行为。
接下来要通过执行如下代码,调用白板服务端 API,为刚刚创建的房间签出 Room Token。
var url = "https://api.netless.link/v5/rooms";
var requestInit = {
method: "POST",
headers: {
"content-type": "application/json",
region: "cn-hz", // 指定处理该请求的白板数据中心,此处选的是杭州
token: "NETLESSSDK_YWs9ZzdkR.......", // 签发的 SDK Token,需提前准备
},
};
window
.fetch(url, requestInit)
.then(function (response) {
return response.json();
})
.then(function (roomJSON) {
// 创建房间成功,获取描述房间信息的 roomJSON
console.log(roomJSON);
})
.catch(function (err) {
// 失败了,打印出 Error 以便分析为何失败
console.error(err);
});
如果执行成功,将返回该房间的 Room Token。如下:
这个就是我们需要的房间钥匙 Room Token。
注意:由于必须通过白板服务端 API 签出 Room Token,而该行为必须用到 SDK Token。显然,出于安全方面的顾虑,该操作也不能在前端做。当前端需要 Room Token 时,应该先调用业务服务器的 API,再由业务服务器调用白板服务端 API 签出 Room Token。
第二步、客户端实现白板互动系统
添加依赖项
创建一个名为 fastboard_quickstart 的文件夹,通过命令行进入 fastboard_quickstart 目录并运行 npm init 命令来创建 package.json 文件。
然后命令行里执行下面的命令来添加 Fastboard 的依赖。
npm add @netless/fastboard @netless/window-manager white-web-sdk
因为后面需要打包项目才可以运行,所以我们需要指定构建工具。本文推荐使用 Vite。
我们手动在 package.json 文件下 devDependencies 中添加 vite 字段,并在 scripts 中定义项目运行的命令行。示例如下:
{
"name": "fastboard_quickstart",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "vite build",
"dev": "vite --open",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "",
"dependencies": {
"@netless/fastboard": "^0.2.6",
"@netless/window-manager": "^0.4.7",
"white-web-sdk": "^2.16.10"
},
"devDependencies": {
"vite": "latest"
}
}
实现用户界面
在 fastboard_quickstart 文件夹中新建 index.html,将以下代码复制到 index.html 实现应用的界面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app" style="width: 600px; height: 400px; border: 1px solid"></div>
<script type="module" src="/main.js"></script>
</body>
</html>
这段代码中最主要的是要给挂载白板的元素一个宽高,要不然我们会看不到白板效果。
实现加入房间逻辑
在 fastboard_quickstart 文件夹中新建 main.js,将以下代码复制到 main.js 实现加入白板房间的逻辑:
import { createFastboard, mount } from "@netless/fastboard";
let app;
async function mountFastboard(div) {
app = await createFastboard({
sdkConfig: {
appIdentifier: "上文获取到的 AppId",
region: "cn-hz", // 指定处理该请求的白板数据中心,此处选的是杭州
},
joinRoom: {
uid: "用户 uid", //每个用户的唯一 ID
uuid: "上文获取到的 room uuid",
roomToken: "上文获取到的 Room Token",
},
managerConfig: {
cursor: true, //开启用户光标
},
});
window.app = app;
return mount(app, div);
}
mountFastboard(document.getElementById("app"));
运行项目
在文件 fastboard_quickstart 根目录下运行下列命令安装未安装的依赖:
npm install
安装好之后继续运行下列命令运行项目:
npm run dev
这时候浏览器会自动打开以下页面:
到这里我们已经成功接入了 Fastboard 并拥有了一套和 Agora Flat 一样的白板互动系统。
如上图,接下来我们可以运用左侧的画笔工具在白板上随意涂鸦,我们也支持使用手写板来板书、画画。当一页白板写不下所有内容时,可以轻松点击右下方的新增一页按钮。
同时在工具栏最下方有一个插件中心,里面我们内置了一些实用的第三方工具,例如代码编辑器、Geogebra 数学教学工具、计时器等。
如果我们有其他第三方插件推荐,可以评论区留言,未来我们会集成更多的第三方插件,来提升用户体验。
如需在白板上进行 PPT/PDF/音视频演示等高级功能请查看下一篇文章,敬请期待。
PS:
上文提到的 Fastboard 和 Agora Flat 开源教室均为开源项目,感兴趣的朋友可以前往 GitHub 查看源码。
Web 端 Fastboard:https://github.com/netless-io/fastboard
Android 端 Fastboard:https://github.com/netless-io/fastboard-android
iOS 端 Fastboard:https://github.com/netless-io/fastboard-iOS
Agora Flat 开源教室:https://github.com/netless-io/flat