You need to enable JavaScript to run this app.
导航
Mac
最近更新时间:2024.05.23 14:33:19首次发布时间:2024.05.23 14:33:19

本文介绍如何创建一个 IMCloud C++ 项目,实现即时通讯功能。你也可以通过阅读代码,了解即时通讯的最佳实践。

前提条件
步骤 1:本地依赖集成

下载 SDK 项目 CMakeLists.txt 中配置并链接到 libimcppsdk.dylib。

步骤 2:实现实时通讯功能

初始化

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 新账号实现此功能。

实现直播群

通过以下简单步骤可实现直播群功能。

  1. 创建直播群
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);
  1. 加入直播群
class JoinGroupCallback: public BIM::ResultCallback<BIM::LiveGroupJoinResult> {
public:
    void onFailed(BIM::Error error) override { /* ... */ }
    void onSuccess(BIM::LiveGroupJoinResult result) override { /* ... */ }
};

JoinGroupCallback* callback = new JoinGroupCallback();

// conversationShortId 为创建直播群群成功时返回的conversationShortId、或查询所有直播群得到的conversationShortId
bimClient->getLiveGroupExpandService()->joinLiveGroup(conversationShortId, callback);
  1. 发送直播群消息
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, priority, sendCallback);
  1. 设置直播群消息监听
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);

相关文档