1、PC版本目前处于内测中,如有问题/需求,加入旺旺群反馈(云旺(OpenIM)开发者交流:https://baichuan.bbs.taobao.com/list.html?topicId=65616)。
2、在这个集成教程中,我们使用已创建的Demo应用,向您展示如何快速地集成OpenIM(PC)。
3、一般地,您需要入驻开发者并且创建应用后,才能集成云旺(OpenIM)并且发布您的App。
参考:集成SDK前的准备工作
4、PC版本的SDK基于C++语言开发,在开始集成前,我们默认您已具备相应的开发技术。
技术支持 | |
开发者技术交流群 |
基于业务层的SDK开发,开发者需要关注UI的实现,复杂的业务逻辑、数据存储由SDK完成,并且这些数据跟逻辑,对UI层透明。
1、如果您已经获得Demo包,跳过这一步
2、打开Demo下载页面
包含业务层/协议数据层对外功能的接口及数据结构定义
业务层二进制文件
业务层lib文件,程序编译链接时使用
业务层pdb文件,程序调试时使用
依赖库,包含peregrine,zlib,openssl,开发者可以选择性使用
使用MFC实现的demo程序,提供了个功能模块的基本用法
1、安装Microsoft Visual Studio 2010
2、开发者可以基于demo solution进行开发,demo工程的include文件及lib依赖都已经配置完成,无需修改。如果新增工程,只需要添加公共属性即可完成所有依赖项的添加。
步骤如下:
2.1、打开Property Manager,如图:
2.2点击Property Manager后:
2.3、针对工程Debug以及Release,添加公共属性,如图:
2.4、点击后添加公共属性:
2.5、开发者也可以参考demo,新建solution。如果solution目录结构较demo发生变化,需要修改common_debug.props,common_relase.props中依赖文件的目录即可。
1、在应用程序的主入口添加以下代码
#include <base/at_exit.h> #include <base/path_service.h> #include <core/prgcom_helper.h> base::AtExitManager exit;
2、实现IHostApplication接口,接口定义在[include\host\ IHostApplication.h],登录前必须设置该接口中返回的参数,登录过程中需要。
3、初始化SDK
#include <include/biz/biz/IIMBizMgr.h> InitSDK(spHostApplication);
提供云旺(OpenIM)账号的登录,注销,被踢,断线重连功能。
1、注册Login过程及登出过程的callback
#include <include/biz/login/IIMLoginBiz.h> // 登录阶段 GetIMLoginBiz()->onLoginStep += base::Bind(&CXXX::OnIMLoginStep, this); // 登录成功 GetIMLoginBiz()->onLoginOk += base::Bind(&CXXX::OnIMLoginSuccess, this); // 登录失败 GetIMLoginBiz()->onLoginFail += base::Bind(&CXXX::OnIMLoginFail, this); // 断线重连失败 GetIMLoginBiz()->onReLoginFail += base::Bind(&CXXX::OnIMReLoginFail, this); // 登录后被踢 GetIMLoginBiz()->onKicked += base::Bind(&CXXX::OnIMKicked, this); // 登录成功后网络断开 GetIMLoginBiz()->onNetDisconnect += base::Bind(&CXXX::OnIMNetDisconnect, this); // 注销完成 GetIMLoginBiz()->onLogouted += base::Bind(&CXXX::OnIMLogoutResult, this);
2、登录:调用如下接口,登录结果通过步骤1中的回调通知,错误信息参见回调参数
#include <include/biz/login/IIMLoginBiz.h> GetIMLoginBiz()->Login(uid, pwd, LoginTokenType_PWD);
3、注销:调用如下接口后,SDK会保存数据,待收到onLogouted事件时,注销完成。建议界面调用该接口后显示“注销中,正在保存数据…”,收到onLogouted后再做后续操作。
#include <include/biz/login/IIMLoginBiz.h> GetIMLoginBiz()->Logout();
4、被踢:当在其他windows端登录相同账号时,将收到onKicked事件,此时SDK会保存数据,待收到onLogouted事件时,流程完成。建议界面收到该事件后显示“uid被踢,正在保存数据…”,收到onLogouted后再做后续操作。
5、登录后断线:当登录成功后,网络异常时,将收到onNetDisconnect事件,收到该事件可以调用以下接口重登。
#include <include/biz/login/IIMLoginBiz.h> GetIMLoginBiz()->Relogin();
聊天消息类型包含主类型和子类型,详细如下:
主类型:
IMMsgType_Normal:普通聊天消息
IMMsgType_System:系统消息
IMMsgType_Unknown:未知消息类型
消息格式
IMMsgFormat_Text:文本消息。
IMMsgFormat _Image/ IMMsgFormat _Audio / IMMsgFormat _Gif:图片/音频消息
IMMsgFormat_Custom:自定义消息,SDK不做处理直接透传。
IMMsgFormat_Template:模板消息。
主消息类型 |
消息格式 |
单聊 |
群聊 |
||
发送 |
接收 |
发送 |
接收 |
||
IMMsgType_Normal |
IMMsgFormat _Text |
√ |
√ |
√ |
√ |
IMMsgFormat _Image |
√ |
√ |
√ |
√ |
|
IMMsgFormat _Gif |
√ |
√ |
√ |
√ |
|
IMMsgFormat _Audio |
|
√ |
|
|
|
IMMsgFormat _Custom |
√ |
√ |
√ |
√ |
|
IMMsgFormat _Template |
|
|
|
|
|
IMMsgType_System |
IMMsgFormat _Text |
|
|
|
√ |
各业务支持的消息类型
1、消息展示
1.1、打开聊天窗口,读取未读消息并插入到聊天记录窗口最底部。
#include <include/biz/chat/IIMChatSessionMgr.h> scoped_refptr<IIMChatSession> spSession = GetIMChatSessionMgr()->GetChatSession(appkey, uid); std::list<IMMessage> lstMsgs; spSession->GetUnreadMsgs(lstMsgs);
1.2、点击获取更多,读取更多消息并插入到聊天记录窗口的最顶部。
spSession->GetMoreMsgs(nCount, base::Bind(&CChatDlg::OnGetMoreMsgs, this));
1.3、关闭聊天窗口。
spSession->Close();
2、消息接收
支持格式:文字,图片,音频。
2.2、监听消息,收到消息后会通知到UI层。
GetIMChatSessionMgr()->onNotifyMsgs += base::Bind(&CXXX::OnIMNotifyMsgs, this);
2.3、如果对应Uid的聊天窗口是打开状态,聊天窗口获取未读消息并展示。
std::list<IMMessage> lstMsgs; spSession->GetUnreadMsgs(lstMsgs);
3、消息发送
3.1、支持格式:文字,图片。
注:目前不支持图文混排的消息(与移动端一样),图片,文字单独发送。
3.2、创建消息,并根据返回的IMMessage信息,展示消息。
#include <include/biz/chat/IIMChatSessionMgr.h> scoped_refptr<IIMChatSession> spSession = GetIMChatSessionMgr()->GetChatSession(appkey, uid); // 文本消息 IMMessage msg = spSession-> CreateTextMsg(L”test”); // 自定义消息 IMMessage msg = spSession-> CreateCustomMsg(L”{...}”); // 图片消息 IMMessage msg = spSession->CreateImageMsg(fileLocalPath, imageWidth, imageHeight);
3.3、发送消息,OnSendMsgCallback中根据发送结果,设置消息发送状态。
spSession->SendMessage(msg, base::Bind(&CChatDlg::OnSendMsgCallback, this, msg));
4、消息重发
4.1、消息发送失败,重发消息。
4.2、创建消息,并根据返回的IMMessage信息,展示新消息,删除老消息。
#include <include/biz/chat/IIMChatSessionMgr.h> scoped_refptr<IIMChatSession> spSession = GetIMChatSessionMgr()->GetChatSession(appkey, uid); // 文本消息 IMMessage msg = spSession-> CreateTextMsg(L”test”); // 自定义消息 IMMessage msg = spSession-> CreateCustomMsg(L”{...}”); // 图片消息 IMMessage msg = spSession->CreateImageMsg(fileLocalPath, imageWidth, imageHeight);
4.3、发送消息,OnReSendMsgCallback中根据发送结果,设置消息发送状态。
spSession->ReSendMessage(msgid, msg, base::Bind(&CChatDlg::OnReSendMsgCallback, this, msg));
5、消息删除
#include <include/biz/chat/IIMChatSessionMgr.h> scoped_refptr<IIMChatSession> spSession = GetIMChatSessionMgr()->GetChatSession(appkey, uid); spSession->DeleteMessage(msgid,callback);
群管理:获取群列表、创建群、加入群、退出群、获取和设置群名称、获取和设置群公告、获取群成员列表、邀请联系人加入群、踢出群成员,以及群变更的推送。
1、初始化
群管理器在登录成功后会自动初始化,不需要开发者主动去初始化。
初始化完成后会有onNotifyTribeMgrReady事件通知,所有的群接口调用必须在该事件通知之后,否则就会报错。
GetIMTribeMgr()->onNotifyTribeMgrReady += base::Bind(&CDemoDlg::OnNotifyTribeMgrReady, this);
#include <include/biz/tribe/IIMTribeMgr.h>
CreateTribeParam param; GetIMTribeMgr()->CreateTribe(param, Bind(&CDemoDlg::OnRspCreateTribe, this));
IMTribeID stIMTribeID; GetIMTribeMgr()->JoinTribe(stIMTribeID, Bind(&CDemoDlg::OnRspJoinTribe, this));
IMTribeID stIMTribeID; GetIMTribeMgr()->QuitTribe(stIMTribeID, Bind(&CDemoDlg::OnRspQuitTribe, this));
std::list<IMTribeName> listIMTribeName; GetIMTribeMgr()->GetTribeList(listIMTribeName);
IMTribeID stIMTribeID; IIMTribePtr spIMTribe = GetIMTribeMgr()->GetTribe(stIMTribeID);
#include <include/biz/tribe/IIMTribeMgr.h> scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid); std::list<IMTribeMessage> lstMsgs; spTribeChatSession ->GetUnreadMsgs(lstMsgs);
spTribeChatSession->GetMoreMsgs(nCount, base::Bind(&CTribeChatDlg::OnGetMoreMsgs, this));
spTribeChatSession->Close();
spTribeChatSession()->onNotifyTribeChat += base::Bind(&CXXX::OnNotifyTribeChat, this);
std::list<IMTribeMessage> lstMsgs; spTribeChatSession->GetUnreadMsgs(lstMsgs);
GetIMTribeChatMediaMgr()->onDownloadMediaResult += base::Bind(&CXXX:: OnDownloadMediaResult, this);
#include <include/biz/tribe/IIMTribeMgr.h> scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid);
IMTribeMessage msg = spTribeChatSession -> CreateTextMsg(L”test”);
IMTribeMessage msg = spTribeChatSession -> CreateCustomMsg(L”{…}”);
IMTribeMessage msg = spTribeChatSession ->CreateImageMsg(fileLocalPath, imageWidth, imageHeight);
spTribeChatSession ->SendMessage(msg, base::Bind(&CTribeChatDlg::OnSendMsgCallback, this, msg));
#include <include/biz/tribe/IIMTribeMgr.h> scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid);
IMTribeMessage msg = spTribeChatSession -> CreateTextMsg(L”test”);
IMTribeMessage msg = spTribeChatSession -> CreateCustomMsg(L”{…}”);
IMTribeMessage msg = spTribeChatSession ->CreateImageMsg(fileLocalPath, imageWidth, imageHeight);
spTribeChatSession ->ReSendMessage(msgid, msg, base::Bind(&CChatDlg::OnReSendMsgCallback, this, msg));
#include <include/biz/chat/IIMChatSessionMgr.h> scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid); spTribeChatSession ->DeleteMessage(msgid, callback);
开通消息漫游功能后,可以自动漫游其他机器上发生的聊天消息到本机,开发者无需关注消息漫游逻辑。
1、查询消息漫游开通状态
#include <include/biz/chat/IIMRoamMsgMgr.h> GetIMRoamMsgMgr()->GetRoamStatus(Bind(&CDemoDlg::OnRoamStatus,this));
2、开通/关闭消息漫游功能
#include <include/biz/chat/IIMRoamMsgMgr.h> GetIMRoamMsgMgr()->SetRoamStatus(true, Bind(&CDemoDlg::OnRoamStatus,this)); GetIMRoamMsgMgr()->SetRoamStatus(false,Bind(&CDemoDlg::OnRoamStatus,this));
提供常用系统表情
1、获取系统表情列表,可以用于展示系统表情列表
#include <include/biz/emotion/IIMEmotionMgr.h> std::list<IMEmotionItem> lstItems; GetIMEmotionMgr()->GetAllIMEmotions(lstItems);
2、发送系统表情
将选择的系统表情shortcut字段,以文本消息形式发送。
3、接收系统表情
系统表情以文本消息形式接收,可以通过系统表情的shortcut字段查询文本中是否有表情,并替换成对应的表情图片。