Windows SDK 集成说明


Windows SDK 是为在微软Windows操作系统中集成 IM 功能提供的 SDK。使用C++语言开发,编译器需支持C++11。用户可以用 SDK 实现 IM 功能。目前支持登录、注册、单聊、群聊、聊天室、文本消息、图片、语音、位置等消息以及透传消息,还可以实现好友管理、群组管理等功能。未实现语音通话和视频通话功能。

环信官方网站获取 IM Windows SDK,SDK中目录结构如下:

|-include
  |-bin
  |-lib
  |-doc

release 目录中包含SDK的头文件、lib文件和dll文件,其中easemob_d.lib和easemob_d.dll是Debug版,easemob.pdb是SDK的调试符号文件,libcurl.dll是libcurl库二进制文件。doc 目录包含对 sdk 的详细说明。

创建 EMClient

EMClient 是 IM 服务的入口,可以直接调用 EMClient 的接口,也可以通过 EMClient 获得相应 EMContactManager、EMChatManager 等进行相应的操作。

void CreateEMClient()
{
	if (g_client == NULL)
	{
		CString strAppDir = GetAppDataPath() + L"\\EasemobDemo";
		CefString sAppDir(strAppDir);
		CreateDirectory(strAppDir, NULL);
		easemob::EMChatConfigsPtr configs(new easemob::EMChatConfigs(sAppDir, sAppDir, "easemob-demo#chatdemoui"));
		configs->setOs(EMChatConfigs::OS_MSWIN);
		configs->setEnableConsoleLog(true);
		configs->setAutoAcceptGroup(false);
		configs->setClientResource("windows");
		configs->setLogLevel(EMChatConfigs::DEBUG_LEVEL);
		EMClient *client = EMClient::create(configs);
		g_client = client;

		mChatListener = new ChatListener();
		g_client->getChatManager().addListener(mChatListener);
		mContactListener = new ContactListener();
		g_client->getContactManager().registerContactListener(mContactListener);
		mConnectionListener = new ConnectionListener();
		g_client->addConnectionListener(mConnectionListener);
		mGroupManagerListener = new GroupManagerListener();
		g_client->getGroupManager().addListener(mGroupManagerListener);
	}
}

注册、登录及登出

调用 chatclient 的 createAccount()、login()、logout() 接口可以实现注册、登录、登出功能。

注册的示例:

easemob::EMErrorPtr result = chatClient->createAccount("zhangsan", "passw0rd");
if(result->mErrorCode == EMError::NO_ERROR) { 
    //注册成功 
} else { 
    //注册失败提示错误描述
    cout << result->mDescription << endl; 
}

登录的示例 :

CreateEMClient();
...
...
easemob::EMErrorPtr result = chatClient->login("zhangsan", "passw0rd");
if(result->mErrorCode == EMError::NO_ERROR) { 
    //登录成功 
} else { 
    //登录失败提示错误描述
    cout << result->mDescription << endl; 
}

登出的示例:

g_client->logout();
...
...
	g_client->getChatManager().removeListener(mChatListener);
	g_client->getContactManager().removeContactListener(mContactListener);
	g_client->removeConnectionListener(mConnectionListener);
	g_client->getGroupManager().removeListener(mGroupManagerListener);
	g_client->logout();

	delete mConnectionListener;
	mConnectionListener = NULL;
	delete mContactListener;
	mContactListener = NULL;
	delete mChatListener;
	mChatListener = NULL;
	delete mGroupManagerListener;
	mGroupManagerListener = NULL;
	delete g_client;
	g_client = NULL;

注意:createAccount(), login() 是需要与后台服务器通讯的操作,可能需要一定时间,如果程序想同时显示 UI 的话,需要放在单独线程中处理。

当掉线时,SDK 会自动重连,无需进行任何操作,通过注册连接监听来知道连接状态。

  • 在聊天过程中难免会遇到网络问题,在此 SDK 为您提供了网络监听接口,实时监听。
  • 可以根据 disconnect 返回的 error 判断原因。若服务器返回的参数值为EMError.USER_LOGIN_ANOTHER_DEVICE,则认为是有同一个账号异地登录;若服务器返回的参数值为EMError.USER_REMOVED,则是账号在后台被删除。
class ConnectionListener : public EMConnectionListener {
public:
	ConnectionListener()
	{
	}

	virtual void onDisconnect(EMErrorPtr error);
	virtual void onConnect();
};
...
...
mConnectionListener = new ConnectionListener();
g_client->addConnectionListener(mConnectionListener);

上一章节:iOS客户端集成

下一页:消息