Classroom SDK & Proctor SDK
Updated
Integrate the Classroom SDK or Proctor SDK into your app with the default UI or a customized UI.
This page introduces how to add Flexible Classroom into your app.
Electron
The following figure shows the overall technical architecture of Flexible Classroom:
Integration methods
You can use multiple methods to integrate Flexible Classroom into your Electron project. Depending on whether you need to customize the classroom UI, you can choose different integration methods:
- If you are satisfied with the default UI of Flexible Classroom and do not want to change any of it, integrate the whole Flexible Classroom through CDN.
- If you want to customize the classroom UI based on the default UI of Flexible Classroom, download and use the source code on GitHub to integrate Flexible Classroom.
Use the default UI of Flexible Classroom
To integrate the whole Flexible Classroom through CDN if you're satisfied with the default UI of Flexible Classroom and do not want to change any of it, follow this integration method. You must have an existing Electron project using an Electron version higher than 12.0.0 to use this method.
-
Add the following code to the Electron entry file:
const electron = require('electron'); app.allowRendererProcessReuse = false; -
When creating a
BrowserWindowobject, pass in the following parameters:mainWindow = new BrowserWindow({ ... webPreferences: { ... autoplayPolicy: "no-user-gesture-required", nodeIntegration: true, contextIsolation: false, webSecurity: false, webviewTag: true, enableRemoteModule: true, nativeWindowOpen: true, backgroundThrottling: false } }); -
Add the following dependencies and configurations to
package.json:"agora_electron": { "electron_version": "12.0.0", "prebuilt": true }, "dependencies": { ... "agora-electron-sdk": "3.6.1-rc.9-build.817" "adm-zip": "0.4.14", } -
Import the Agora Classroom SDK in the HTML file and launch a classroom.
Tip
Flexible Classroom's dependency agora-electron-sdk contains the native Node.js module. It is not recommended to use webpack and other construction tools for secondary compilation; otherwise, there may be an error that the Node.js module cannot be found. It is recommended to set these two libraries as external dependencies in the project configuration. For example: externals: {'agora-electron-sdk': 'commonjs2 agora-electron-sdk'}.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Introduce the SDK, 2.9.40 is the sample version number, you can check the latest version number through the release notes or GitHub warehouse branch -->
<script src="https://download.agora.io/edu-apaas/release/edu_sdk@2.9.40.bundle.js"></script>
<!-- Introducing Widget, 2.9.40 is the sample version number. You can check the latest version number through the release notes or GitHub warehouse branch. (Widgets before 2.9.20 are packaged together with the SDK, and there is no need to introduce this library) -->
<script src="https://download.agora.io/edu-apaas/release/edu_widget@2.9.40.bundle.js"></script>
</head>
<body>
<style>
#root {
width: 100%;
height: 100%;
}
</style>
<div id="root"></div>
<script type="text/javascript">
// SDK configuration
// Replace 'Your App ID' with your App ID
AgoraEduSDK.config({
appId: 'Your App ID',
region: 'NA'
});
// Start online class
AgoraEduSDK.launch(document.querySelector('#root'), {
userUuid: 'user id',
userName: 'user name',
roomUuid: 'room id',
roleType: 1, // User roles: 1 is teacher, 2 is student
roomType: 0, // Room type: 0 is one-on-one, 2 is large class, and 4 is small class.
roomName: 'room name',
pretest: true, // Whether to enable pre-class equipment detection.
rtmToken: 'rtm token', // In a test environment, you can use a temporary RTM Token; in a production or security environment, it is strongly recommended that you use a server-generated RTM Token.
language: 'zh', // The language of the classroom interface. If the interface is in English, set it to 'en'.
duration: 60 * 30, // Course time in seconds.
recordUrl: 'https://solutions-apaas.agora.io/apaas/record/dev/2.8.0/record_page.html',
courseWareList: [],
virtualBackgroundImages: [], // Virtual background image resource list
webrtcExtensionBaseUrl: 'https://solutions-apaas.agora.io/static', // WebRTC plug-in deployment address
uiMode: 'light', // Set the classroom interface to the light mode. If you want the interface to be in the dark mode, set it to 'dark'.
widgets: {
popupQuiz: AgoraSelector,
countdownTimer: AgoraCountdown,
easemobIM: AgoraHXChatWidget,
mediaPlayer: FcrStreamMediaPlayerWidget,
poll: AgoraPolling,
watermark: FcrWatermarkWidget,
webView: FcrWebviewWidget,
netlessBoard: FcrBoardWidget
},
listener: (evt, args) => {
},
});
</script>
</body>
</html>The sample code requires passing in rtmToken. You can refer to Generate a Signaling token to learn what is a Signaling token, how to get a temporary Signaling token for testing purpose, and how to generate a Signaling token from the server. The generated token passed in userId must be consistent with the userUuid parameters passed in the launch method; otherwise, the generated token will be invalid.
Customize the classroom UI
If you want to customize the classroom UI based on the default UI of Flexible Classroom, you need to integrate Flexible Classroom by downloading the source code on GitHub. Refer to the following steps:
Make sure you have set up the development environment.
-
To clone the Flexible-Classroom-Desktop repository and check out the latest release branch, run the following commands:
git clone https://github.com/AgoraIO-Community/flexible-classroom-desktop.git cd flexible-classroom-desktop -
Switch to the latest branch.
For example, if you want to switch to the branch of v2.9.40, just run the following command:
git checkout release/2.9.40Agora recommends switching the branch to the latest release.
-
Modify the code according to your needs. See Classroom and Proctor SDK UI customization guide.
-
Debug your code.
After finishing the development, follow these steps to debug:
-
To install dependencies, run the following commands:
yarn install:packages -
To run the project in development mode, use the following command:
yarn dev:classroom:electron
-
-
After finishing the development, package the SDK or app with the following commands:
-
To package the Electron macOS client:
yarn pack:classroom:sdk yarn pack:classroom:plugin yarn ci:build yarn pack:electron:mac -
To package the Electron Windows client:
yarn pack:classroom:sdk yarn pack:classroom:plugin yarn ci:build yarn pack:electron:win
-
Frequent issues
Installation of the agora-electron-sdk module fails
If you seem unable to install the agora-electron-sdk module under the Linux system, it is because the current operating system of the module does not support Linux. Take the following steps to solve the problem:
-
Modify the
package.jsonconfiguration parameters: In the project'sagora_electronroot directory setplatformaswin32:"agora_electron": { "electron_version": "12.0.0", "prebuilt": true, "platform": "win32" } -
Install dependencies again.
How to specify the system architecture for packaging Electron applications
-
Modify the commands in the
packages/agora-demo-app/package.jsonfile and add parameters at the end to specify the system architecture. Here we set it to 64-bit operating system architecture. If you need to package a 32-bit operating system, change it to:pack:macpack:winarch--ia32"pack:mac": "yarn electron:copy:electron:mac && electron-builder --mac -p never --x64", "pack:win": "yarn electron:copy:electron:win && electron-builder --win -p never --x64", -
Modify the
package.jsonconfiguration parameters: In the project'sagora_electronroot directory specifyarchasx64. If you need to package a 32-bit operating system, change it toia32."agora_electron": { "electron_version": "12.0.0", "prebuilt": true, "arch": "x64" } -
Delete the
node_modules/agora-electron-sdkfolder and execute theyarn install --check-filescommand to reinstall the dependencies. -
Run the packaging command.
