本文介绍如何创建一个 IMCloud C++ 项目,实现即时通讯功能。你也可以通过阅读代码,了解即时通讯的最佳实践。
获取 AppID 和 Token,你可以通过阅读密钥说明了解更多 Token 相关信息
Win7 sp1 +
Visual Studio 2017 +
下载 SDK 项目 CMakeLists.txt 中配置并链接到 imcppsdk.lib。
auto bimClient = std::make_shared<BIM::Client>(); // 需要指定一个可访问目录存储sdk相关文件 std::string dir = ""; #ifdef WIN32 dir = QCoreApplication::applicationDirPath().toStdString(); #else dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).toStdString(); #endif BIM::SDKConfig sdkConfig = { BIM::ENV_RELEASE, dir, false }; bimClient->initSDK(uid, APP_ID, sdkConfig);
设置 IMSDK 生命周期内重要事件的监听可以了解 IMSDK 的运行状态,数据同步状态等信息,便于开发者业务逻辑判断。
长链接状态监听 onConnectStatusChanged 方法回调当前长链接状态,如果长链接不可用时收发消息将会受到影响。onTokenInvalid 方法在 token 过期时会回调。
class CustomConnectListener: public BIM::ConnectListener { public: void onTokenInvalid(BIM::ErrorCode code) override {} void onConnectStatusChanged(BIM::ConnectStatus status) override {} }; CustomConnectListener* statusListner = new CustomConnectListener(); bimClient->addConnectListener(statusListner);
完成初始化并设置监听后,即可进入到登录流程。
登录示例代码如下。登录会根据当前传入的 uid,token 鉴权,并拉取历史会话、消息等数据,同时建立长链接。
class LoginCallback: public BIM::SimpleCallback { public: void onSuccess() override {} void onFailed(BIM::Error error) override {} }; LoginCallback* callback = new LoginCallback(); bimClient->login(uid, token, callback);
获取当前登录用户
登出
class LogoutCallback: public BIM::SimpleCallback { public: void onSuccess() override {} void onFailed(BIM::Error error) override {} }; LogoutCallback* callback = new LogoutCallback(); bimClient->logout(callback);
账号切换
开发者可以通过 logout 当前账号,再创建新的 BIM::Client 实例,通过 login 新账号实现此功能。
通过以下简单步骤可实现直播群功能。
class CreateGroupCallback: public BIM::ResultCallback<BIM::Conversation> { public: void onFailed(BIM::Error error) override { /* ... */ } void onSuccess(BIM::Conversation result) override { /* ... */ } }; // 创建直播群所需信息 auto name = "直播群名称"; auto desc = "直播群描述"; auto notice = "直播群公告"; auto avatarUrl = "直播群头像"; CreateGroupCallback* callback = new CreateGroupCallback(); BIM::GroupInfo info = { name, desc, notice, avatarUrl, {} }; bimClient->getLiveGroupExpandService()->createLiveGroup(info, callback);
class JoinGroupCallback: public BIM::ResultCallback<BIM::Conversation> { public: void onFailed(BIM::Error error) override { /* ... */ } void onSuccess(BIM::Conversation result) override { /* ... */ } }; JoinGroupCallback* callback = new JoinGroupCallback(); // conversationShortId 为创建直播群群成功时返回的conversationShortId、或查询所有直播群得到的conversationShortId bimClient->getLiveGroupExpandService()->joinLiveGroup(conversationShortId, callback);
class CustomSendCallback: public BIM::SendCallback { void onSuccess(BIM::Message message) override {} void onFailed(BIM::Message message, BIM::Error error) override {} }; //创建消息 auto bimMessage = bimClient->createTextMessage("消息内容"); //指定优先级 auto priority = BIM::MessagePriority::MSG_PRIORITY_NORMAL; //发送消息 CustomSendCallback* sendCallback = new CustomSendCallback(); bimClient->getLiveGroupExpandService()->sendLiveGroupMessage(message, *this->mGroup, , sendCallback);
class CustomMessageListener: public BIM::LiveGroupMessageListener { void onUpdateMessage(BIM::Message message) override { // 收到更新消息 } void onDeleteMessage(BIM::Message message) override { // 收到删除消息 } void onReceiveMessage(BIM::Message message) override { // 收到新消息 } void onSendMessage(BIM::Message message) override { // 发送消息 } }; CustomMessageListener* messageListener = new CustomMessageListener; bimClient->getLiveGroupExpandService()->addLiveGroupMessageListener(messageListener);