前置准备

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层透明。

Step1 下载SDK

1、如果您已经获得Demo包,跳过这一步

2、打开Demo下载页面

Step2 SDK目录结构说明

  • include

                包含业务层/协议数据层对外功能的接口及数据结构定义

  • bin

                业务层二进制文件

  • lib

                业务层lib文件,程序编译链接时使用

  • symbol

                业务层pdb文件,程序调试时使用

  • third_party

                依赖库,包含peregrine,zlib,openssl,开发者可以选择性使用

  • demo

                使用MFC实现的demo程序,提供了个功能模块的基本用法

Step3 开发环境配置

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中依赖文件的目录即可。

Step4 SDK初始化

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);

Step5 登录,注销

提供云旺(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();
  • 重登失败,网络异常,将收到onNetDisconnect事件,可以继续调用重登接口。
  • 重登失败,非网络异常(token失效等),将收到 onReLoginFail事件,此时SDK会保存数据,待收到onLogouted事件时,切换到登录界面重新登录。
  • 重登成功,将收到onReLoginOk事件。

Step6 消息类型

聊天消息类型包含主类型和子类型,详细如下:

主类型:

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

各业务支持的消息类型

Step7 单聊

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);

Step8 群管理

群管理:获取群列表、创建群、加入群、退出群、获取和设置群名称、获取和设置群公告、获取群成员列表、邀请联系人加入群、踢出群成员,以及群变更的推送。

1、初始化

群管理器在登录成功后会自动初始化,不需要开发者主动去初始化。

初始化完成后会有onNotifyTribeMgrReady事件通知,所有的群接口调用必须在该事件通知之后,否则就会报错。

断线重连成功后,群管理器也会重新初始化一遍,也会有onNotifyTribeMgrReady事件通知,为保持UI数据和业务层一致,开发者需要对群相关的界面进行刷新,可参考demo。
	GetIMTribeMgr()->onNotifyTribeMgrReady += base::Bind(&CDemoDlg::OnNotifyTribeMgrReady, this);
2、群管理器
	#include <include/biz/tribe/IIMTribeMgr.h>
3、创建群
	CreateTribeParam param;
	GetIMTribeMgr()->CreateTribe(param, Bind(&CDemoDlg::OnRspCreateTribe, this));
4、加入群
	IMTribeID stIMTribeID;
	GetIMTribeMgr()->JoinTribe(stIMTribeID, Bind(&CDemoDlg::OnRspJoinTribe, this));
5、退出群
	IMTribeID stIMTribeID;
	GetIMTribeMgr()->QuitTribe(stIMTribeID, Bind(&CDemoDlg::OnRspQuitTribe, this));
6、获取群列表
	std::list<IMTribeName> listIMTribeName;
	GetIMTribeMgr()->GetTribeList(listIMTribeName);
7、获取群对象
	IMTribeID stIMTribeID;
	IIMTribePtr spIMTribe = GetIMTribeMgr()->GetTribe(stIMTribeID);

Step9 群聊

提供群聊消息的接收,发送,存储,读取功能。
1、消息展示
1.1、打开聊天窗口,读取未读消息并插入到聊天记录窗口最底部。
	#include <include/biz/tribe/IIMTribeMgr.h>
	scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid);
	std::list<IMTribeMessage> lstMsgs;
	spTribeChatSession ->GetUnreadMsgs(lstMsgs);
1.2、点击获取更多,读取更多消息并插入到聊天记录窗口的最顶部。
	spTribeChatSession->GetMoreMsgs(nCount, base::Bind(&CTribeChatDlg::OnGetMoreMsgs, this));
1.3、关闭聊天窗口。
	spTribeChatSession->Close();
2、消息接收
支持格式:文字,图片。
2.1、监听消息,收到消息后会通知到UI层。
	spTribeChatSession()->onNotifyTribeChat += base::Bind(&CXXX::OnNotifyTribeChat, this);
2.2、如果对应tid的聊天窗口是打开状态,聊天窗口获取未读消息并展示。
	std::list<IMTribeMessage> lstMsgs;
	spTribeChatSession->GetUnreadMsgs(lstMsgs);
2.3、如果是图片消息,图片下载成功后会通知到UI层。
	GetIMTribeChatMediaMgr()->onDownloadMediaResult += base::Bind(&CXXX:: OnDownloadMediaResult, this);
3、消息发送
支持格式:文字,图片,自定义。
目前不支持图文混排的消息(与移动端一样),图片,文字单独发送。
3.1、创建消息,并根据返回的IMTribeMessage信息,展示消息。
	#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);
3.2、发送消息,OnSendMsgCallback中根据发送结果,设置消息发送状态。
	spTribeChatSession ->SendMessage(msg, base::Bind(&CTribeChatDlg::OnSendMsgCallback, this, msg));
4、消息重发
消息发送失败,重发消息。SDK会先删除原消息,再发送新消息。
4.1、创建消息,并根据返回的IMTribeMessage信息,展示新消息,删除老消息。
	#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);
4.2、发送消息,OnReSendMsgCallback中根据发送结果,设置消息发送状态。
	spTribeChatSession ->ReSendMessage(msgid, msg, base::Bind(&CChatDlg::OnReSendMsgCallback, this, msg));
4.3、消息删除
删除消息。
	#include <include/biz/chat/IIMChatSessionMgr.h>
	scoped_refptr<openim::IIMTribeChatSession> spTribeChatSession = GetIMTribeMgr()->GetTribeChatSession(tid);
	spTribeChatSession ->DeleteMessage(msgid, callback);

Step10 消息漫游

开通消息漫游功能后,可以自动漫游其他机器上发生的聊天消息到本机,开发者无需关注消息漫游逻辑。

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));

Step11 系统表情

        提供常用系统表情

        1、获取系统表情列表,可以用于展示系统表情列表

	#include <include/biz/emotion/IIMEmotionMgr.h>
	std::list<IMEmotionItem> lstItems;
	GetIMEmotionMgr()->GetAllIMEmotions(lstItems);

        2、发送系统表情

                将选择的系统表情shortcut字段,以文本消息形式发送。

        3、接收系统表情

                系统表情以文本消息形式接收,可以通过系统表情的shortcut字段查询文本中是否有表情,并替换成对应的表情图片。

 

 

FAQ

怎么找不到 推送证书上传的位置呢?

返回
顶部