Frame Activity Bridge SDK 연동 가이드
본 가이드는 외부 개발자가 SchoolPT 플랫폼과 임베딩 콘텐츠 간의 원활한 통신을 위해 사용할 Frame Activity Bridge SDK의 기본 사용법을 설명합니다.
주의: 현재 문서에 기재된 이벤트 타입, 데이터 타입, 설치 방식 등은 초안 상태이며 추후 변경될 수 있습니다.
SequenceDiagram
sequenceDiagram participant Embed as 임베디드 컨텐츠 participant Bridge as FrameActivityBridge participant Platform as 학습 플랫폼 participant CMS as CMS 컨텐츠 입력자 CMS->>Platform: 문제 타입 및 정답 데이터 입력 Note over CMS,Platform: EmbedNode 데이터 저장 Embed->>Bridge: startStudy() Bridge->>Platform: 학습 시작 알림 Note over Embed,Bridge: 객관식 단일 정답 제출 Embed->>Bridge: submitAnswer(questionIndex: 1, answers: {selectedOptions: [1]}) Bridge->>Platform: 사용자 응답 전송 Platform->>Platform: 정답 확인 Note over Embed,Bridge: 객관식 다중 정답 제출 Embed->>Bridge: submitAnswer(questionIndex: 0, answers: {selectedOptions: [1, 3]}) Bridge->>Platform: 사용자 응답 전송 Platform->>Platform: 정답 확인 Note over Embed,Bridge: 주관식 답안 제출 Embed->>Bridge: submitAnswer(questionIndex: 2, answers: {userAnswer: "대한민국"}) Bridge->>Platform: 사용자 응답 전송 Platform->>Platform: 정답 확인 Note over Embed,Bridge: 활동 답안 제출 Embed->>Bridge: submitAnswer(questionIndex: 1, answers: {userAnswer: "활동 결과 텍스트"}) Bridge->>Platform: 사용자 응답 전송 Platform->>Platform: 활동 결과 저장 Embed->>Bridge: endStudy() Bridge->>Platform: 학습 종료 알림 Platform->>Platform: 학습 결과 조회 Platform->>Platform: 학습 데이터 채점
Mermaid
복사
1. SDK 소개
Frame Activity Bridge SDK는 외부 임베드 콘텐츠에서 발생하는 학습 이벤트(예: 학습 시작, 답안 제출, 학습 완료 등)를 SchoolPT 플랫폼에 전달하고, 학습 데이터의 저장 및 로드를 지원하는 JavaScript 라이브러리입니다.
2. 설치
설치 방식은 아직 미정이며, 다음과 같은 방식들 중 하나로 제공될 예정입니다:
•
CDN: HTML <script>, <link> 태그를 통해 로드
•
NPM: Node Package Manager를 통한 설치
•
Minified & 난독화된 JS 파일: 직접 제공되는 파일을 포함
시작하기
import { FrameActivitySdk } from 'frame-activity-sdk';
// SDK 인스턴스 생성
const sdk = new FrameActivitySdk();
// SDK 초기화 및 학습 활동 등록
await sdk.init([
{
activityId: '1',
type: 'MULTIPLE_CHOICE',
choices: [
{ label: '서울', isCorrect: true },
{ label: '부산', isCorrect: false },
]
}
]);
TypeScript
복사
API 레퍼런스
init(activities: Activity[])
SDK를 초기화하고 학습 활동을 등록합니다.
submit(data: SubmitData[])
학습자의 답안을 제출합니다.
save(key: string, data: SaveData)
학습 진행 상태를 저장합니다.
load(key: string)
저장된 학습 상태를 불러옵니다.
학습 활동 타입
MULTIPLE_CHOICE (객관식)
interface MultipleChoiceActivity {
activityId: string;
type: 'MULTIPLE_CHOICE';
choices: Array<{
label: string;
isCorrect: boolean;
}>;
}
TypeScript
복사
SHORT_ANSWER (주관식) <WIP>
interface ShortAnswerActivity {
activityId: string;
type: 'SHORT_ANSWER';
answer: string;
}
TypeScript
복사
NON_INTERACTIVE (비활동형) <WIP>
interface NonInteractiveActivity {
activityId: string;
type: 'NON_INTERACTIVE';
}
TypeScript
복사
사용 예시
객관식 문제 구현
const sdk = new FrameActivitySdk();
// 학습 활동 초기화
await sdk.init([{
activityId: '1',
type: 'MULTIPLE_CHOICE',
choices: [
{ label: '서울', isCorrect: true },
{ label: '부산', isCorrect: false },
{ label: '대전', isCorrect: false },
]
}]);
// 학습 시작
await sdk.startStudy();
// 답안 제출
await sdk.submit([{
activityId: '1',
userSelectedIndexes: [0] // 첫 번째 선택지 선택
}]);
// 학습 종료
await sdk.endStudy();
TypeScript
복사
학습 상태 저장 및 불러오기
// 상태 저장
await sdk.save('quiz-progress', {
currentQuestion: 2,
answers: [0, 1],
});
// 상태 불러오기
const savedState = await sdk.load('quiz-progress');
TypeScript
복사
주의사항
1.
모든 API 호출은 비동기(async/await) 방식으로 동작합니다.
2.
activityId는 문자열 형태의 고유 식별자여야 합니다.
3.
학습 활동은 반드시 init() 메서드를 통해 먼저 등록되어야 합니다.
API 상세 명세
init(activities: Activity[])
학습 활동을 초기화하고 등록합니다.
매개변수:
•
activities: 등록할 학습 활동 배열
반환값:
•
Promise<void>
예시:
await sdk.init([
{
activityId: '1',
type: 'MULTIPLE_CHOICE',
choices: [
{ label: '선택지 1', isCorrect: true },
{ label: '선택지 2', isCorrect: false },
]
}
]);
TypeScript
복사
submit(data: SubmitData[])
학습자의 답안을 제출합니다.
매개변수:
•
data: 제출할 답안 데이터 배열
타입:
interface SubmitData {
activityId: string;
userSelectedIndexes?: number[]; // 객관식용
userAnswer?: string; // 주관식용
}
TypeScript
복사
예시:
// 객관식 답안 제출
await sdk.submit([{
activityId: '1',
userSelectedIndexes: [0, 2] // 복수 선택 가능
}]);
// 주관식 답안 제출
await sdk.submit([{
activityId: '2',
userAnswer: '대한민국'
}]);
TypeScript
복사
save(key: string, data: SaveData)
현재 학습 상태를 저장합니다.
매개변수:
•
key: 저장할 데이터의 키
•
data: 저장할 데이터 객체
예시:
await sdk.save('progress', {
currentStep: 3,
userAnswers: ['답안1', '답안2']
});
TypeScript
복사
load(key: string)
저장된 학습 상태를 불러옵니다.
매개변수:
•
key: 불러올 데이터의 키
반환값:
•
Promise<SaveData | null>
예시:
const savedData = await sdk.load('progress');
if (savedData) {
// 저장된 데이터 처리
}
TypeScript
복사