IM 即时通讯
Windows/macOS
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
更新日志
Demo 更新日志
NIM SDK 更新日志
快速开始
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
开发指南
概要介绍
集成方式(当前版本)
集成方式(Windows旧版本)
集成方式(macOS旧版本)
初始化
登录登出
消息收发
最近会话
历史记录
用户资料托管
好友关系托管
事件订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
开通聊天室功能
聊天室
圈组功能
初始化
登录圈组
圈组服务器管理
圈组服务器成员管理
游客功能
频道相关
频道管理
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
频道用户定制权限
自定义权限项
成员权限判定
身份组相关查询
圈组订阅机制
圈组消息相关
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
消息正在输入
圈组消息搜索
圈组消息查询
查询@我的消息
服务器未读数
圈组系统通知
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组各端接口命名差异
语音录制与播放
NOS云存储服务
文档转换
API 参考
Windows/macOS API 参考
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
配置应用客户端标识
参考文档
升级指引
开发示例
UI库指南
Demo源码导读
打包发布
类与常量定义说明
常见问题
FAQ
服务协议

升级指引

更新时间: 2021/07/22 20:18:41

sdk升级6.6.6及以上版本引导

当前使用SDK的痛点

1.SDK引入包含目录比较多,项目配置起来不方便

2.SDK C++封装层 nim与nim_chatroom中包含了许多重复代码

3.C++封装层静态库只提供了运行时库为md的项目

4.nim_demo引入的SDK与从官网上下载的SDK在代码层面上略有出入,升级SDK时需要进行代码对比

出于解决以上几个痛点的目的我们对6.6.6的SDK进行了目录调整,以使用户接入SDK更加快捷方便, 保持SDK与nim demo引入SDK的一致性, 满足不同用户对C++封装层的不同要求,例如以静态库(mt/md)或者动态库的方式引入,并对三方库的引入做了一些改变

SDK 目录结构变化

SDK 目录结构及主要文件介绍

nim_sdk ..................................................... SDK目录
    include ................................................. SDK 引入包含目录
        depend_lib .......................................... SDK C++封装层依赖库目录
            include ......................................... SDK C++封装层依赖库包含目录
                json ........................................ Json工具包含目录
                nim_json_util.h ............................. JSON工具辅助方法
                nim_sdk_util.h .............................. 提供加载/卸载SDK以及获取接口的方法
        nim_c_api.h ......................................... c im api引入文件
        nim_chatroom_c_api.h ................................ c chatroom api引入文件
        nim_cpp_api.h ....................................... c++ im api 引入文件
        nim_chatroom_cpp_api.h .............................. c++ chatroom api 引入文件
        nim_cpp_tools_api.h ................................. nim 工具类api 引入文件
    public_define ........................................... SDK 共公类型定义目录 c/c++都会引用到数据结构定义
        defines ............................................. im/chatroom/nim_tools数据类型定义目录
        util ................................................ 编译开关及基础类型定义目录
        nim_sdk_define_include.h ............................ im 公共数据类型定义引入文件
        nim_chatroom_define_include.h ....................... chatroom 公共数据类型定义引入文件
        nim_tool_define_include.h ........................... nim_tools 公共数据类型定义引入文件
        nim_util_include.h .................................. 基础类型定义引入文件
    src ..................................................... c api/c++封装层实现代码目录
        c_sdk ............................................... c api 定义代码目录                
        cpp_sdk ............................................. c++封装层代码目录
            depend_lib ...................................... c++封装层依赖库的实现代码目录
                cpp_wrapper_util_md.sln ..................... c++封装层依赖库 md/mdd 运行时库工程的解决方案文件
                cpp_wrapper_util_mt.sln ..................... c++封装层依赖库 mt/mtd 运行时库工程的解决方案文件
            nim ............................................. im c++封装层实现代码目录
                nim_sdk_cpp_wrapper_dll.vcxproj ............. im c++封装层动态库工程文件 
                nim_sdk_cpp_wrapper_lib_md.vcxproj .......... im c++封装层静态库 md/mdd 运行时库工程文件
                nim_sdk_cpp_wrapper_lib_mt.vcxproj .......... im c++封装层静态库 mt/mtd 运行时库工程文件
            nim_chatroom .................................... chatrooom c++封装层实现代码目录
                nim_chatroom_sdk_cpp_wrapper_dll.vcxproj .... chatrooom c++封装层动态库工程文件
                nim_chatroom_sdk_cpp_wrapper_lib_md.vcxproj . chatrooom c++封装层静态库 md/mdd 运行时库工程文件
                nim_chatroom_sdk_cpp_wrapper_lib_mt.vcxproj . chatrooom c++封装层静态库 mt/mtd 运行时库工程文件
            nim_tools ....................................... nim tools c++封装层实现代码目录
                audio ....................................... audio模块 c++封装层实现代码目录
                http ........................................ http模块 c++封装层实现代码目录
    libs .................................................... c++封装层(静态库)、依赖库输出目录
        win ................................................. windows平台库目录
            x86 ............................................. x86平台输出目录
            x64 ............................................. x64平台输出目录
        iOS ................................................. iOS平台库目录
        Mac ................................................. Mac平台库目录

升级注意事项

SDK 引入

文件包含目录

引入SDK时包含目录包含到nim_sdk目录即可,以im demo 的custom_app_sdk工程为例,如下图

c++封装层引入解决方案

C++封装层的工程文件在nim_sdk/src/nim/、nim_sdk/src/nim_chatroom/目录下,可以直接添加到解决方案中,以im demo为例如下图

静态库引入

C++封装层(静态库方式)缺省的输出目录为nim_sdk/libs/x86/md(mt)/、nim_sdk/libs/x64/md(mt)/,在库管理器中可以根据选择的运行时库指定附加依库目录到libs相应的目录并指定相应的静态库到附加依赖项中,以im demo 的custom_app_sdk工程为例,如下图

C++动态库的使用方式

C++封装层(静态库方式)缺省的输出目录为nim_sdk/bin/x86_dlls/、nim_sdk/bin/x64_dlls/,当以动态库的方式使用c++封装层时,可以将生成后的nim_sdk_cpp_wrapper_dll.dll/nim_sdk_cpp_wrapper_dll_d.dll、nim_chatroom_sdk_cpp_wrapper_dll.dll/nim_chatroom_sdk_cpp_wrapper_dll_d.dll拷贝到指定目录(例如exe的输出目录),以im demo的custom_app_sdk工程为例,如下图

C++封装层依赖库编译

C++封装层依赖库(depend_lib)预先生成了vs2013运行时库为md(mdd)/mt(mtd),debug/release版本的静态库,如果开发者需要不同vs版本(不同的平台工具集)的可静态库,以打开nim_sdk/src/cpp_sdk/depend_lib/cpp_wrapper_util_md.sln(cpp_wrapper_util_mt.sln),修改cpp_wrapper工程的平台工具集来生成相应的版本.

SDK回调应用层的异步实现

SDK在回调应用层时,如果应用层没有进行异步处理,可能会阻塞SDK内部线程,发生SDK没有响应、断线等问题,为了避免这种情况的发生,应用层在接收到SDK的回调时最好转为异步。SDK实现了指定异步回调的接口

/** @fn void SetCallbackFunction(const ChatRoom::SDKClosure& callback)
* 当以动态库使用SDK时 设置SDK回调方法,为了不阻塞SDK线程,在回调中应该把任务抛到应用层的线程中
* @param[in] callback	  回调方法
* @return void 无返回值
*/
static void SetCallbackFunction(const SDKClosure& callback);

以 im demo为例,其使用方法如下

nim::Client::SetCallbackFunction([](const StdClosure & task) {
	nbase::ThreadManager::PostTask(ThreadId::kThreadUI, task);
});

关于 nim_cpp_wrapper_util::Json

nim_cpp_wrapper_util::Json是把jsoncpp封装到了cpp_wrapper_util中,nim_cpp_wrapper_util::Json与json(jsoncpp)的转换可以参考以下代码(im demo中 nim_demo\tool_kits\shared\cpp_wrapper_util.h)

Json::Value NimCppWrapperJsonValueToJsonValue(const nim_cpp_wrapper_util::Json::Value& param)
{
    Json::Value ret;
    Json::Reader().parse(nim_cpp_wrapper_util::Json::FastWriter().write(param), ret);
    return ret;
}
nim_cpp_wrapper_util::Json::Value JsonValueToNimCppWrapperJsonValue(const Json::Value& param)
{
    nim_cpp_wrapper_util::Json::Value ret;
    nim_cpp_wrapper_util::Json::Reader().parse(Json::FastWriter().write(param), ret);
    return ret;
}
此文档是否对你有帮助?
有帮助
我要吐槽
  • sdk升级6.6.6及以上版本引导
  • 当前使用SDK的痛点
  • SDK 目录结构变化
  • SDK 目录结构及主要文件介绍
  • 升级注意事项
  • SDK 引入
  • 文件包含目录
  • c++封装层引入解决方案
  • 静态库引入
  • C++动态库的使用方式
  • C++封装层依赖库编译
  • SDK回调应用层的异步实现
  • 关于 nim_cpp_wrapper_util::Json