功能概述
本模块主要用于接收和处理讲师、助教和管理员等用户发起的答题卡,方便接入方实现题目处理展示、观众答题和结果显示等功能。
答题卡分为普通答题和快速问答。
普通答题功能较为齐全,包含单选、多选、评分和投票题目,还可以使用答题限时功能,答题者需在限定时间内进行答题。
初始化及销毁
在实例化该模块并进行使用之前,需要对SDK进行初始化配置,详细见参考文档。
在线文件引入方式
// script 标签引入,根据版本号引入JS版本。
<script src="https://websdk.videocc.net/interactions-receive-sdk/0.24.0/lib/polyv-ir.umd.js"></script>
<script>
const { AnswerCard } = window.PolyvIRSDK;
</script>
import 方式引入(推荐)
import { AnswerCard } from '@polyv/interactions-receive-sdk';
const answerCardSdk = new AnswerCard();
// ...
// 销毁 SDK 实例,清除逻辑
answerCardSdk.destroy();
使用流程
监听“答题开始”事件
当讲师/助教等发起端发起一次答题卡时,会触发 SDK 的 answerCardSdk.events.GET_TEST_QUESTION_CONTENT
事件,该事件含有答题卡相关信息,包括答题卡类型、题目、选项及是否限时题目等,可以将对应信息展示给用户用于作答。
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_CONTENT, function(msg) {
console.log('接收到答题开始事件', msg,'题目:', msg.name, '题目限时:', msg.duration);
});
展示答题卡题目时,可以根据答题卡类型和题目类型做不同的展示:
answerCardSdk.questionItemTypes
下的属性表示答题卡类型列表(快速问答、普通答题)。将其属性值与 msg.itemType
的值进行对比,就可以知道当前是哪种答题卡。
answerCardSdk.questionTypes
下的属性表示题目具体类型(单选、多选、评分或者投票类型)。将其属性值与 msg.type
的值对比,就可以知道当前题目的具体类型。
例如:
function questionHandler(msg) {
if (msg.itemType === answerCardSdk.questionItemTypes.QuickAnswerCard) {
const questionType = {
[answerCardSdk.questionTypes.CheckBox]: '多选题',
[answerCardSdk.questionTypes.Radio]: '单选题',
}[msg.type];
console.log('本次答题卡为快速问答, 题目类型为: ' + questionType);
} else if (msg.itemType === answerCardSdk.questionItemTypes.Normal) {
const questionType = {
[answerCardSdk.questionTypes.CheckBox]: '多选题',
[answerCardSdk.questionTypes.Radio]: '单选题',
[answerCardSdk.questionTypes.Score]: '评分题',
[answerCardSdk.questionTypes.Vote]: '投票题',
}[msg.type];
console.log('本次答题卡为普通答题, 题目类型为: ' + questionType);
}
}
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_CONTENT, questionHandler);
对于限时题目,可以通过 answerCardSdk.getServerTime()
获取服务端当前剩余时间,在必要的时候进行同步。
const data = await answerCardSdk.getServerTime();
console.log('剩余时间', data.time);
提交用户答案
如果当前正在答题,可使用 answerCardSdk.answerQuestion
将用户答案提交给服务端。该方法是异步方法,参数是用户所选选项的字符串数组(大写),根据返回结果 code 字段展示不同的提示信息。code 的值所表示的状态见 API 文档中 answerCardSdk.answerQuestionResCode
的属性。
const res = await answerCardSdk.answerQuestion(['A', 'B']);
if (res.code === answerCardSdk.answerQuestionResCode.SubmitSuccess) {
console.log('提交成功');
}
监听“答题结束”事件
发起端停止答题,或限时题目倒计时结束时,answerCardSdk.events.STOP_TEST_QUESTION
会被触发,此时需要将正在显示的题目关闭、或者显示截止答题等提示。
answerCardSdk.on(answerCardSdk.events.STOP_TEST_QUESTION, function(msg) {
console.log('答题结束', msg);
});
监听“答题结果”事件
在讲师发送结果后,SDK 将触发 answerCardSdk.events.GET_TEST_QUESTION_RESULT
事件,该事件含有题目内容、题目答案和选项人数等,可基于这些信息,与用户个人答案进行对比,展示用户答题结果。
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_RESULT, function(msg) {
console.log('答题结果', msg);
});
可使用 answerCardSdk.curSubmittedAnswer
(string类型) 获取用户当前题目的个人已提交答案,与正确答案进行对比。
注意
如果不需要再使用答题卡 SDK 时,请调用 SDK 实例的 destroy 方法去销毁实例。