实现基础功能
更新时间: 2024/08/07 16:14:03
本文介绍了 NEMeetingKit 实现基础功能的示例代码,可以作为快速接入阶段参考,详细实现方式可以参考 GitHub Demo 工程。
调用时序
NEMeetingKit 实现在线会议的主要流程如下图所示:
sequenceDiagram
participant AppServer
participant App
participant NEMeetingSever
participant NEMeetingKit
par 创建、绑定会议账号
AppServer->>NEMeetingSever: 创建、绑定会议账号
NEMeetingSever->>AppServer: 返回 account 和 Token
App->>AppServer: 预约会议
AppServer->>NEMeetingSever: 发起预约会议请求
NEMeetingSever->>AppServer: 返回 MeetingId
AppServer->>App: 返回 MeetingId
App->>NEMeetingKit: SDK 初始化
NEMeetingKit->>App: 初始化成功
App->>AppServer: 查询会议账号
NEMeetingSever->>AppServer: 返回 account 和 Token
end
par 账号登录
App->>NEMeetingKit: 账号登录(account+token)
NEMeetingKit->>NEMeetingSever: 登录鉴权
NEMeetingSever->>NEMeetingKit: 鉴权成功
NEMeetingKit->>App:登录成功
end
par 加入会议
App->>NEMeetingKit: 加入会议
note right of App: 显示会议 UI 界面<br>并接入会议流程
NEMeetingKit->>NEMeetingSever: 发起加入<br>会议请求
NEMeetingSever->>NEMeetingKit: 返回成功
NEMeetingKit->>App: 加入成功
end
par 离开或结束会议
App->>NEMeetingKit: 离开或结束会议
NEMeetingKit->>NEMeetingSever: 发起请求
NEMeetingSever->>NEMeetingKit: 返回成功
NEMeetingKit->>App: 结束
end
初始化 SDK
在调用 NEMeetingkit 其他接口之前,您首先需要完成初始化操作。请不要重复初始化,否则 NEMeetingkit 会报错。
C++std::string appkey = "appKey";
std::string url = "url";
std::string runPath = "runPath";
nem_sdk_interface::NEMeetingKitConfig config;
config.setAppKey(appkey);
config.setAppName("NetEase Meeting");
config.getAppInfo()->ProductName("NetEase Meeting");
config.getAppInfo()->OrganizationName("NetEase");
config.getAppInfo()->ApplicationName("Meeting");
config.getAppInfo()->SDKPath(runPath);
config.setRunAdmin(false);
config.setUseAssetServerConfig(false);
config.setLanguage(NEMeetingLanguage::kNEChinese);
config.setServerUrl(url);
config.getLoggerConfig()->LoggerLevel((NELogLevel)log_level);
NEMeetingKit::getInstance()->initialize(config, [this](MeetingErrorCode errorCode, const std::string& errorMessage, const NEMeetingCorpInfo& info) {
PrintLog("MeetingSDK initialize errorMessage: " + errorMessage);
});
账户登录、登录
设置回调
C++void MainWindow::onAddAccountServiceListenerBtnClicked() {
auto service = NEMeetingKit::getInstance()->getAccountService();
if (service) {
service->addListener(this);
} else {
// MeetingKit is not initialized
}
}
C++void MainWindow::onKickOut() {
// callback
}
void MainWindow::onAuthInfoExpired() {
// callback
}
void MainWindow::onReconnected() {
// callback
}
void MainWindow::onAccountInfoUpdated(NEAccountInfo accountInfo) {
// callback
}
登录的调用
C++void MainWindow::onGetAccountInfoBtnClicked() {
auto service = NEMeetingKit::getInstance()->getAccountService();
if (service) {
service->getAccountInfo([this](MeetingErrorCode errorCode, const std::string& errorMessage, const NEAccountInfo& accountInfo) {
// callback
});
} else {
// MeetingKit is not initialized
}
}
登出的调用
C++void MainWindow::onLogoutBtnClicked() {
auto service = NEMeetingKit::getInstance()->getAccountService();
if (service) {
service->logout([this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
} else {
// MeetingKit is not initialized
}
}
显示会前主界面
C++auto settingService = NEMeetingKit::getInstance()->getSettingService();
settingService->openSettingsWindow();
加入会议
设置回调
Objective-Cauto m_meetingService = NEMeetingKit::getInstance()->getMeetingService();
m_meetingService->joinMeeting(param, opts, [this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
入会的调用
C++NEJoinMeetingParams param;
param.meetingId = meetingId;
param.displayName = displayName;
NEJoinMeetingOptions opts;
opts.noAudio = param.noAudio;
opts.noVideo = param.noVideo;
opts.noChat = param.noChat;
opts.noInvite = param.noInvite;
m_meetingService->joinMeeting(param, opts, [this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
离开会议
设置回调
C++auto m_meetingService = NEMeetingKit::getInstance()->getMeetingService();
if (!m_meetingService){
m_meetingService->addMeetingStatusListener([this](const NEMeetingStatusListener::Event& event) {
if (event.status == NEMeetingStatus::MEETING_STATUS_DISCONNECTING) {
// callback
}
});
}
}
离会的调用
C++m_meetingService->leaveCurrentMeeting(closeIfHost, [this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
提取日志文件
C++auto service = NEMeetingKit::getInstance()->getFeedbackService();
if (service) {
service->loadFeedbackView([this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
} else {
// MeetingKit is not initialized
}
预约会议
C++auto service = NEMeetingKit::getInstance()->getPremeetingService();
NEMeetingItem createScheduleMeetingItem();
m_premeetingService->scheduleMeeting(item, [this](MeetingErrorCode errorCode, const std::string& errorMessage, const NEMeetingItem& meetingItem) {
// callback
});
编辑预约会议
C++NEMeetingItem item;
//todo 修改编辑会议对象
m_premeetingService->editMeeting(item, editRecurringMeeting, [this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
取消预约会议
C++std::string meetingId;
m_premeetingService->cancelMeeting(meetingId, cancelRecurringMeeting, [this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// callback
});
常用定制化功能
定制会议中菜单回调
C++m_meetingService = NEMeetingKit::getInstance()->getMeetingService();
if (m_meetingService) {
m_meetingService->addMeetingStatusListener(this);
m_meetingService->setOnInjectedMenuItemClickListener(
[this](NEMenuClickInfoPtr clickInfoPtr, const NEMeetingInfo& meetingInfo, const NEMenuStateController& stateController) {
// callback
});
}
定制会议中消息通知回调
C++auto service = NEMeetingKit::getInstance()->getMessageService();
if (service) {
service->addMeetingMessageChannelListener(
[this](const NEMeetingSessionMessage& message) {
// callback
},
[this](const std::list<NEMeetingRecentSession>& messages) {
// callback
},
[this](const NEMeetingSessionMessage& message) {
// callback
},
[this](const std::string& sessionId, const NEMeetingSessionType& sessionType) {
// callback
});
);
} else {
// MeetingKit is not initialized
}
销毁 SDK
C++void MainWindow::onUnInitBtnClicked() {
NEMeetingKit::getInstance()->unInitialize([this](MeetingErrorCode errorCode, const std::string& errorMessage) {
// 销毁完成的回调,此处将退出请求抛到
});
}
更多功能
请参考 NEMeetingSDK(NESDK)接口参考 文档。
此文档是否对你有帮助?