升级指南
从 1.1.5 升级至 2.0.0
在 2.0.0 版中,声网优化了 Classroom SDK 的内部架构,重新设计了 Agora Edu Context API。
本节列出 2.0.0 与 1.1.5 在 Edu Context API 上的主要变动。
如需了解 Agora Edu Context API 2.0.0 的具体信息,查看 API 文档。
Chat context
移除 AgoraEduMessageContext 和 AgoraEduMessageHandler,由 AgoraWidgets 库中的 AgoraRtmIMWidget 代替。
Whiteboard context
移除 AgoraEduWhiteBoardContext、AgoraEduWhiteBoardHandler、AgoraEduWhiteBoardToolContext、 AgoraEduWhiteBoardPageControlContext、AgoraEduWhiteBoardPageControlHandler,
由 AgoraWidgets 库中的 AgoraWhiteBoardWidget 代替。
Device context
移除 AgoraEduDeviceContext 和 AgoraEduDeviceHandler,该类提供的方法和回调由 AgoraEduMediaContext 和 AgoraEduMediaHandler 代替,具体如下:
setCameraDeviceEnable、setMicDeviceEnable、setSpeakerDeviceEnable由AgoraEduMediaContext中的openLocalDevice和closeLocalDevice代替。switchCameraFacing由AgoraEduMediaContext中的openLocalDevice代替。onCameraDeviceEnableChanged、onCameraDeviceFacingChanged、onMicDeviceEnableChanged、onSpeakerDeviceEnableChanged由AgoraEduMediaHandler中的onLocalDeviceStateUpdated代替。
Hands-up context
移除 AgoraEduHandsUpContext 和 AgoraEduHandsUpHandler,该类提供的方法和回调由 AgoraEduUserContext 和 AgoraEduUserHandler 代替,具体如下:
updateHandsUpState由AgoraEduUserContext中的handsWave和handsDown代替。onHandsUpState由AgoraEduUserHandler中的onUserHandsWave和onUserHandsDown代替。onHandsUpEnable由AgoraEduUserHandler中的onUserHandsWaveEnable代替。
Media context
openCamera更名为openLocalDevice。closeCamera更名为closeLocalDevice。startPreview更名为startRenderVideo。stopPreview更名为stopRenderVideo。openMicrophone更名为openLocalDevice。closeMicrophone更名为closeLocalDevice。renderRemoteView更名为startRenderVideo。- 移除
publishStream。 - 移除
unpublishStream。
Room context
joinClassroom更名为joinRoom。updateFlexRoomProperties更名为updateRoomProperties。- 移除
uploadLog和onUploadLogSuccess,由AgoraEduMonitorContext中的uploadLog代替。 registerEventHandler更名为registerRoomEventHandler。- 移除
onShowErrorInfo。 onClassroomJoined更名为onRoomJoinedSuccess。onFlexRoomPropertiesInitialize更名为RoomContext.getRoomProperties。- 移除
onFlexRoomPropertiesChanged,由onRoomPropertiesUpdated和onRoomPropertiesDeleted代替。 - 移除
onClassroomName,由AgoraEduRoomContext中的getRoomInfo代替。 - 移除
onClassroomState,由onClassStateUpdated和onRoomClosed代替。 onClassTimeInfo由AgoraEduRoomContext中的getRoomInfo代替。onNetworkQuality由AgoraEduMonitorHandler中的onLocalNetworkQualityUpdated代替。onConnectionState由AgoraEduMonitorHandler中的onLocalConnectionUpdated代替。
Screen-sharing context
- 移除
AgoraEduScreenShareContext和AgoraEduScreenShareHandler,由AgoraEduStreamContext代替。当AgoraEduContextStreamInfo里有videoSourceType为screen时,可以判断为屏幕共享视频流。 - 移除
AgoraEduScreenShareHandler。AgoraEduStreamContext代替。onUpdateScreenShareState由AgoraEduStreamHandler中的onStreamJoined、onStreamLeft、onStreamUpdate代替。
User context
updateFlexUserProperties更名为updateUserPropertiesregisterEventHandler更名为registerUserEventHandler- 移除
onUpdateUserList,由onRemoteUserJoined、onRemoteUserLeft、onUserUpdated代替。 - 移除
onUpdateCoHostList,由onCoHostUserListAdded、onCoHostUserListRemoved代替。 onKickOut更名为onLocalUserKickOut。- 移除
onUpdateAudioVolumeIndication, 由AgoraEduMediaHandler中的onVolumeUpdated代替。 onShowUserReward更名为onUserRewarded。- 移除
onFlexUserPropertiesChanged,由onUserPropertiesUpdated、onUserPropertiesDeleted代替。 - 移除
onStreamUpdated,由AgoraEduStreamHandler中的onStreamUpdated代替。
从 1.1.5 之前版本升级至 1.1.5
如果你在 1.1.5 之前版本中修改了灵动课堂的默认 UI,需参考以下步骤从 1.1.5 之前的版本升级至 1.1.5:
步骤一:重新集成灵动课堂
根据集成灵动课堂文档中的步骤将 1.1.5 集成至你的项目中。
步骤二:替换 SDKs/AgoraEduUI 目录下的文件
用原先 AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppView 目录下的文件替换 SDKs/AgoraEduUI 目录下的文件,具体如下:
- 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/AgoraResources替换SDKs/AgoraEduUI/AgoraEduUI/AgoraResources。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/Render替换SDKs/AgoraEduUI/AgoraEduUI/Render。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/UIController替换SDKs/AgoraEduUI/AgoraEduUI/UIController。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/WhiteBoard替换SDKs/AgoraEduUI/AgoraEduUI/WhiteBoard。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/AgoraUIEduAppViews.xcassets替换SDKs/AgoraEduUI/AgoraEduUI/AgoraEduUI.xcassets。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/UIManager替换SDKs/AgoraEduUI/AgoraEduUI/UIManager,并将AgoraUIManager.swift改名为AgoraEduUI.swift,将AgoraUIManager类改名为AgoraEduUI。 - 用
AgoraEduSDK/Modules/AgoraUIEduAppViews/AgoraUIEduAppViews/Widget替换Widgets/AgoraWidgets/Chat。
1.1.5 之前版本的目录结构如下:
1.1.5 的目录结构如下:
步骤三:修改 AgoraEduUI.swift 文件
在 AgoraEduUI.swift 中,进行以下修改:
-
将
AgoraEduContextAppType更名为AgoraEduContextRoomType。 -
将
var chat: AgoraEduWidget改为var chat: AgoraBaseWidget。 -
参考下图,添加以下代码新增
initWidgets方法。Swiftfunc initWidgets() {
guard let widgetInfos = contextPool.widget.getWidgetInfos() else {
return
}
for info in widgetInfos {
switch info.widgetId {
case "AgoraChatWidget":
info.properties = ["contextPool": contextPool]
let chat = contextPool.widget.create(with: info)
chat.addMessageObserver(self)
let hasConversation = (viewType == .oneToOne ? 0 : 1)
if let message = ["hasConversation": hasConversation].jsonString() {
chat.widgetDidReceiveMessage(message)
}
self.chat = chat
default:
break
}
}
}
步骤四:替换 SDKs/Modules/AgraUIEduBaseViews 目录下的文件
用原先 AgoraEduSDK/Modules/AgraUIEduBaseViews 目录下的文件替换 SDKs/Modules/AgraUIEduBaseViews 目录下的文件,具体如下:
- 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraResources替换SDKs/Modules/AgraUIEduBaseViews/AgoraResources。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraAlertView替换SDKs/Modules/AgraUIEduBaseViews/AgoraAlertView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraAnimatedImage替换SDKs/Modules/AgraUIEduBaseViews/AgoraAnimatedImage。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraHandsUpView替换SDKs/Modules/AgraUIEduBaseViews/AgoraHandsUpView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraRefresh替换SDKs/Modules/AgraUIEduBaseViews/AgoraRefresh。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraToastView替换SDKs/Modules/AgraUIEduBaseViews/AgoraToastView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUIEduBaseViews.xcassets替换SDKs/Modules/AgraUIEduBaseViews/AgoraUIEduBaseViews.xcassets。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUINavigationBar替换SDKs/Modules/AgraUIEduBaseViews/AgoraUINavigationBar。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUIUserView替换SDKs/Modules/AgraUIEduBaseViews/AgoraUIUserView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUserListView替换SDKs/Modules/AgraUIEduBaseViews/AgoraUserListView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUserRenderListView替换SDKs/Modules/AgraUIEduBaseViews/AgoraUserRenderListView。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/Utils替换SDKs/Modules/AgraUIEduBaseViews/Utils。 - 用
AgoraEduSDK/Modules/AgraUIEduBaseViews/AgoraUIChatView替换Widgets/AgoraWidgets/Chat。
1.1.5 之前版本的目录结构如下:
1.1.5 版本的目录结构如下:
步骤五:修改 AgoraChatWidget.swift 文件
在 AgoraChatWidget.swift 文件中进行以下操作:
-
将初始化方法更改为下面的新的初始化方法:
Swiftpublic required init(widgetId: String,
contextPool: AgoraEduContextPool,
properties: [AnyHashable : Any]?) {
super.init(widgetId: widgetId,
contextPool: contextPool,
properties: properties)
initViews()
initLayout()
initData()
} -
增加
AgoraEduMessageContext属性:Swiftprivate weak var context: AgoraEduMessageContext?
public required override init(widgetId: String,
properties: [AnyHashable: Any]?) {
super.init(widgetId: widgetId,
properties: properties)
initViews()
initLayout()
if let contextPool = properties?["contextPool"] as? AgoraEduContextPool {
context = contextPool.chat
initData()
}
}