升级指南
从 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
更名为updateUserProperties
registerEventHandler
更名为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()
}
}