TIMManager.h 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072
  1. // Copyright (c) 2023 Tencent. All rights reserved.
  2. #ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_MANAGER_H_
  3. #define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_MANAGER_H_
  4. #include "TIMCloudDef.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. // 模块简介
  9. // - 基础功能接口,包含 IMSDK 的初始化、反初始化、登录、登出以及用户资料管理等功能
  10. //
  11. // 模块参数说明
  12. // - API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
  13. // - 如果参数中包含非英文字符,请使用 UTF-8 编码
  14. //
  15. // 模块回调说明
  16. // 1. 回调的类型:
  17. // - 调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
  18. // - 调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
  19. // 2. 回调触发的线程:
  20. // - 对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时,SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
  21. // - 对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时,SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
  22. // - 对于 iOS 和 MAC 平台,SDK 默认将所有回调抛到主线程
  23. // - 对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
  24. /////////////////////////////////////////////////////////////////////////////////
  25. //
  26. // 一. SDK 基础功能相关配置选项定义
  27. //
  28. /////////////////////////////////////////////////////////////////////////////////
  29. // 1.1 连接事件类型
  30. enum TIMNetworkStatus {
  31. // 已连接
  32. kTIMConnected,
  33. // 失去连接
  34. kTIMDisconnected,
  35. // 正在连接
  36. kTIMConnecting,
  37. // 连接失败
  38. kTIMConnectFailed,
  39. };
  40. // 1.2 登陆状态
  41. enum TIMLoginStatus {
  42. // 已登录
  43. kTIMLoginStatus_Logined = 1,
  44. // 登录中
  45. kTIMLoginStatus_Logining = 2,
  46. // 未登录
  47. kTIMLoginStatus_UnLogined = 3,
  48. // 登出中
  49. kTIMLoginStatus_Logouting = 4,
  50. };
  51. // 1.3 日志级别
  52. enum TIMLogLevel {
  53. // 关闭日志输出
  54. kTIMLog_Off,
  55. // 全量日志
  56. kTIMLog_Test,
  57. // 开发调试过程中一些详细信息日志
  58. kTIMLog_Verbose,
  59. // 调试日志
  60. kTIMLog_Debug,
  61. // 信息日志
  62. kTIMLog_Info,
  63. // 警告日志
  64. kTIMLog_Warn,
  65. // 错误日志
  66. kTIMLog_Error,
  67. // 断言日志
  68. kTIMLog_Assert,
  69. };
  70. // 1.4 用户状态类型
  71. enum TIMUserStatusType {
  72. // 未知状态
  73. kTIMUserStatusType_Unkown = 0,
  74. // 在线状态
  75. kTIMUserStatusType_Online = 1,
  76. // 离线状态
  77. kTIMUserStatusType_Offline = 2,
  78. // 未登录(如主动调用 @ref TIMLogout 接口,或者账号注册后还未登录)
  79. kTIMUserStatusType_UnLogined = 3,
  80. };
  81. // 1.5 用户性别类型
  82. enum TIMGenderType {
  83. // 未知性别
  84. kTIMGenderType_Unknown,
  85. // 性别男
  86. kTIMGenderType_Male,
  87. // 性别女
  88. kTIMGenderType_Female,
  89. };
  90. // 1.6 用户加好友的选项
  91. enum TIMProfileAddPermission {
  92. // 未知
  93. kTIMProfileAddPermission_Unknown,
  94. // 允许任何人添加好友
  95. kTIMProfileAddPermission_AllowAny,
  96. // 添加好友需要验证
  97. kTIMProfileAddPermission_NeedConfirm,
  98. // 拒绝任何人添加好友
  99. kTIMProfileAddPermission_DenyAny,
  100. };
  101. // 1.7 资料变更类型
  102. enum TIMProfileChangeType {
  103. // 未知类型
  104. kTIMProfileChange_None,
  105. // 资料修改
  106. kTIMProfileChange_Profile,
  107. };
  108. /////////////////////////////////////////////////////////////////////////////////
  109. //
  110. // 二. SDK 基础事件回调定义
  111. //
  112. /////////////////////////////////////////////////////////////////////////////////
  113. /**
  114. * 2.1 网络状态回调
  115. *
  116. * @param status 网络状态,请参考 @ref TIMNetworkStatus
  117. * @param code 值为ERR_SUCC表示成功,其他值表示失败。详情请参考 [错误码](https://cloud.tencent.com/document/product/269/1671)
  118. * @param desc 错误描述字符串
  119. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  120. *
  121. * __感知网络状态的回调处理示例__
  122. * @code{.json}
  123. * void NetworkStatusListenerCallback(TIMNetworkStatus status, int32_t code, const char* desc, const void* user_data) {
  124. * switch(status) {
  125. * case kTIMConnected: {
  126. * printf("OnConnected ! user_data:0x%08x", user_data);
  127. * break;
  128. * }
  129. * case kTIMDisconnected:{
  130. * printf("OnDisconnected ! user_data:0x%08x", user_data);
  131. * break;
  132. * }
  133. * case kTIMConnecting:{
  134. * printf("OnConnecting ! user_data:0x%08x", user_data);
  135. * break;
  136. * }
  137. * case kTIMConnectFailed:{
  138. * printf("ConnectFailed code:%u desc:%s ! user_data:0x%08x", code, desc, user_data);
  139. * break;
  140. * }
  141. * }
  142. * }
  143. * @endcode
  144. */
  145. typedef void (*TIMNetworkStatusListenerCallback)(enum TIMNetworkStatus status, int32_t code, const char* desc, const void* user_data);
  146. /**
  147. * 2.2 被踢下线回调
  148. *
  149. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  150. */
  151. typedef void (*TIMKickedOfflineCallback)(const void* user_data);
  152. /**
  153. * 2.3 用户票据过期回调
  154. *
  155. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  156. */
  157. typedef void (*TIMUserSigExpiredCallback)(const void* user_data);
  158. /**
  159. * 2.4 当前用户的资料更新的回调
  160. *
  161. * @param json_user_profile 当前用户的资料,请参考 @ref UserProfile
  162. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  163. */
  164. typedef void (*TIMSelfInfoUpdatedCallback)(const char* json_user_profile, const void* user_data);
  165. /**
  166. * 2.5 用户状态变更的回调
  167. *
  168. * @param json_user_status_array 用户状态的列表,用户状态请参考 @ref TIMUserStatus
  169. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  170. */
  171. typedef void (*TIMUserStatusChangedCallback)(const char* json_user_status_array, const void* user_data);
  172. /**
  173. * 2.6 订阅用户资料变更的回调
  174. *
  175. * @param json_user_info_array 订阅用户资料更新列表,用户资料请参考 @ref UserProfile
  176. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  177. */
  178. typedef void (*TIMUserInfoChangedCallback)(const char* json_user_info_array, const void* user_data);
  179. /**
  180. * 2.7 日志回调
  181. *
  182. * @param level 日志级别,请参考 @ref TIMLogLevel
  183. * @param log 日志字符串
  184. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  185. */
  186. typedef void (*TIMLogCallback)(enum TIMLogLevel level, const char* log, const void* user_data);
  187. /////////////////////////////////////////////////////////////////////////////////
  188. //
  189. // 三. 注册 SDK 基础事件回调 API
  190. //
  191. /////////////////////////////////////////////////////////////////////////////////
  192. /**
  193. * 3.1 设置网络连接状态监听回调
  194. *
  195. * @param cb 连接事件回调,请参考 @ref TIMNetworkStatusListenerCallback
  196. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  197. *
  198. * @note
  199. * - 当调用接口 @ref TIMInit 时,ImSDK会去连接云后台。此接口设置的回调用于监听网络连接的状态。
  200. * - 网络连接状态包含四个:正在连接、连接失败、连接成功、已连接。这里的网络事件不表示用户本地网络状态,仅指明ImSDK是否与即时通信IM云Server连接状态。
  201. * - 可选设置,如果要用户感知是否已经连接服务器,需要设置此回调,用于通知调用者跟通讯后台链接的连接和断开事件,另外,如果断开网络,等网络恢复后会自动重连,自动拉取消息通知用户,用户无需关心网络状态,仅作通知之用
  202. * - 只要用户处于登录状态,ImSDK内部会进行断网重连,用户无需关心。
  203. */
  204. TIM_API void TIMSetNetworkStatusListenerCallback(TIMNetworkStatusListenerCallback cb, const void* user_data);
  205. /**
  206. * 3.2 设置被踢下线通知回调
  207. *
  208. * @param cb 踢下线回调,请参考 @ref TIMKickedOfflineCallback
  209. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  210. *
  211. * @note
  212. * 用户如果在其他终端登录,会被踢下线,这时会收到用户被踢下线的通知,出现这种情况常规的做法是提示用户进行操作(退出,或者再次把对方踢下线)。
  213. * 用户如果在离线状态下被踢,下次登录将会失败,可以给用户一个非常强的提醒(登录错误码ERR_IMSDK_KICKED_BY_OTHERS:6208),开发者也可以选择忽略这次错误,再次登录即可。
  214. * 用户在线情况下的互踢情况:
  215. * - 用户在设备1登录,保持在线状态下,该用户又在设备2登录,这时用户会在设备1上强制下线,收到 TIMKickedOfflineCallback 回调。
  216. * 用户在设备1上收到回调后,提示用户,可继续调用login上线,强制设备2下线。这里是在线情况下互踢过程。
  217. * 用户离线状态互踢:
  218. * - 用户在设备1登录,没有进行logout情况下进程退出。该用户在设备2登录,此时由于用户不在线,无法感知此事件,
  219. * 为了显式提醒用户,避免无感知的互踢,用户在设备1重新登录时,会返回(ERR_IMSDK_KICKED_BY_OTHERS:6208)错误码,表明之前被踢,是否需要把对方踢下线。
  220. * 如果需要,则再次调用login强制上线,设备2的登录的实例将会收到 TIMKickedOfflineCallback 回调。
  221. */
  222. TIM_API void TIMSetKickedOfflineCallback(TIMKickedOfflineCallback cb, const void* user_data);
  223. /**
  224. * 3.3 设置票据过期回调
  225. *
  226. * @param cb 票据过期回调,请参考 @ref TIMUserSigExpiredCallback
  227. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  228. *
  229. * @note
  230. * 用户票据,可能会存在过期的情况,如果用户票据过期,此接口设置的回调会调用。
  231. * 同时, @ref TIMLogin 也将会返回 70001 错误码。开发者可根据错误码或者票据过期回调进行票据更换
  232. */
  233. TIM_API void TIMSetUserSigExpiredCallback(TIMUserSigExpiredCallback cb, const void* user_data);
  234. /**
  235. * 3.4 设置当前用户资料更新回调
  236. *
  237. * @param cb 当前用户的资料更新的回调,请参考 @ref TIMSelfInfoUpdatedCallback
  238. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  239. */
  240. TIM_API void TIMSetSelfInfoUpdatedCallback(TIMSelfInfoUpdatedCallback cb, const void* user_data);
  241. /**
  242. * 3.5 设置用户状态变更回调
  243. *
  244. * @param cb 用户状态变更的回调,请参考 @ref TIMUserStatusChangedCallback
  245. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  246. *
  247. * @note 收到通知的情况:
  248. * 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
  249. * 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
  250. * 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
  251. */
  252. TIM_API void TIMSetUserStatusChangedCallback(TIMUserStatusChangedCallback cb, const void* user_data);
  253. /**
  254. * 3.6 设置用户资料变更回调
  255. *
  256. * @param cb 用户资料更新的回调,请参考 @ref TIMUserInfoChangedCallback
  257. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  258. *
  259. * @note
  260. * 仅当通过 @ref TIMSubscribeUserInfo 成功订阅的用户(仅限非好友用户)的资料发生变更时,才会激活此回调函数
  261. */
  262. TIM_API void TIMSetUserInfoChangedCallback(TIMUserInfoChangedCallback cb, const void *user_data);
  263. /**
  264. * 3.7 设置日志回调
  265. *
  266. * @param cb 日志回调,请参考 @ref TIMLogCallback
  267. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  268. *
  269. * @note
  270. * - 设置日志监听的回调之后,ImSDK内部的日志会回传到此接口设置的回调。
  271. * - 开发者可以通过接口 @ref TIMSetConfig 配置哪些日志级别的日志回传到回调函数。
  272. */
  273. TIM_API void TIMSetLogCallback(TIMLogCallback cb, const void* user_data);
  274. /////////////////////////////////////////////////////////////////////////////////
  275. //
  276. // 四. SDK 初始化相关 API
  277. //
  278. /////////////////////////////////////////////////////////////////////////////////
  279. /**
  280. * 4.1 ImSDK初始化
  281. *
  282. * @param sdk_app_id 官网申请的SDKAppid
  283. * @param json_sdk_config ImSDK配置选项 Json 字符串, Json Key请参考 @ref SdkConfig
  284. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  285. *
  286. * @note
  287. * - 在使用ImSDK进一步操作之前,需要先初始化ImSDK
  288. * - json_sdk_config 可以为 NULL 空字符串指针或者""空字符串,在此情况下 @ref SdkConfig 均为默认值。
  289. * - json_sdk_config 里面的每个Json key都是选填的,详情请参考 @ref SdkConfig
  290. * - kTIMSdkConfigLogFilePath 和 kTIMSdkConfigConfigFilePath 的值要求是 UTF-8 编码
  291. *
  292. * __示例__
  293. * @code{.cpp}
  294. * Json::Value json_value_init;
  295. * json_value_init[kTIMSdkConfigLogFilePath] = "D:\\";
  296. * json_value_init[kTIMSdkConfigConfigFilePath] = "D:\\";
  297. *
  298. * uint64_t sdk_app_id = 1234567890;
  299. * if (TIM_SUCC != TIMInit(sdk_app_id, json_value_init.toStyledString().c_str())) {
  300. * // TIMInit 接口调用错误,ImSDK初始化失败
  301. * }
  302. *
  303. * // json_value_init.toStyledString() 得到 json_sdk_config JSON 字符串如下
  304. * {
  305. * "sdk_config_config_file_path" : "D:\\",
  306. * "sdk_config_log_file_path" : "D:\\"
  307. * }
  308. * @endcode
  309. */
  310. TIM_API int TIMInit(uint64_t sdk_app_id, const char* json_sdk_config);
  311. /**
  312. * 4.2 ImSDK 反初始化
  313. *
  314. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  315. *
  316. * @note
  317. * 卸载DLL或退出进程前需此接口卸载ImSDK,清理ImSDK相关资源
  318. *
  319. * __示例__
  320. * @code{.cpp}
  321. * if (TIM_SUCC != TIMUninit()) {
  322. * // ImSDK 反初始化失败
  323. * }
  324. * @endcode
  325. */
  326. TIM_API int TIMUninit(void);
  327. /**
  328. * 4.3 获取 ImSDK 版本号
  329. *
  330. * @return const char* 返回 ImSDK 的版本号
  331. */
  332. TIM_API const char* TIMGetSDKVersion(void);
  333. /**
  334. * 4.4 获取服务器当前时间
  335. *
  336. * @return uint64_t 服务器时间,单位 s
  337. *
  338. * @note
  339. * 可用于信令离线推送场景下超时判断
  340. */
  341. TIM_API uint64_t TIMGetServerTime();
  342. /**
  343. * 4.5 设置额外的用户配置
  344. *
  345. * @param json_config 配置选项
  346. * @param cb 返回设置配置之后所有配置的回调,此回调cb可为空,表示不获取所有配置信息。回调函数定义和参数解析请参考 @ref TIMCommCallback
  347. * @param user_data 用户自定义数据,ImSDK 只负责传回给回调函数 cb,不做任何处理
  348. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  349. *
  350. * @note
  351. * - 目前支持设置的配置有 http 代理的 IP 和端口、socks5 代理的 IP 和端口、输出日志的级别等。
  352. * - http 代理的 IP 和端口、socks5 代理的 IP 和端口建议调用 @ref TIMInit 之前配置。
  353. * - 每项配置可以单独设置,也可以一起配置,详情请参考 @ref SetConfig。
  354. *
  355. * __设置 http 代理示例__
  356. * @code{.cpp}
  357. * Json::Value json_http_proxy;
  358. * json_http_proxy[kTIMHttpProxyInfoIp] = "http://http-proxy.xxxxx.com";
  359. * json_http_proxy[kTIMHttpProxyInfoPort] = 8888;
  360. * json_http_proxy[kTIMHttpProxyInfoUserName] = "User-01";
  361. * json_http_proxy[kTIMHttpProxyInfoPassword] = "123456";
  362. * Json::Value json_config;
  363. * json_config[kTIMSetConfigHttpProxyInfo] = json_http_proxy;
  364. *
  365. * if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  366. * // 回调内部
  367. * }, this)) {
  368. * // TIMSetConfig接口调用失败
  369. * }
  370. * @endcode
  371. *
  372. * __设置 socks5 代理示例__
  373. * @code{.cpp}
  374. * Json::Value json_socks5_value;
  375. * json_socks5_value[kTIMSocks5ProxyInfoIp] = "111.222.333.444";
  376. * json_socks5_value[kTIMSocks5ProxyInfoPort] = 8888;
  377. * json_socks5_value[kTIMSocks5ProxyInfoUserName] = "";
  378. * json_socks5_value[kTIMSocks5ProxyInfoPassword] = "";
  379. * Json::Value json_config;
  380. * json_config[kTIMSetConfigSocks5ProxyInfo] = json_socks5_value;
  381. *
  382. * if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  383. * // 回调内部
  384. * }, this)) {
  385. * //TIMSetConfig接口调用失败
  386. * }
  387. * @endcode
  388. *
  389. * __设置 pac 代理示例__
  390. * @code{.cpp}
  391. * Json::Value json_pac_value;
  392. * json_pac_value[kTIMPACProxyInfoUserName] = "";
  393. * json_pac_value[kTIMPACProxyInfoPassword] = "";
  394. * Json::Value json_config;
  395. * json_config[kTIMSetConfigPACProxyInfo] = json_pac_value;
  396. *
  397. * if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  398. * // 回调内部
  399. * }, this)) {
  400. * //TIMSetConfig接口调用失败
  401. * }
  402. * @endcode
  403. */
  404. TIM_API int TIMSetConfig(const char* json_config, TIMCommCallback cb, const void* user_data);
  405. /////////////////////////////////////////////////////////////////////////////////
  406. //
  407. // 五. 登录/登出相关 API
  408. //
  409. /////////////////////////////////////////////////////////////////////////////////
  410. /**
  411. * 5.1 登录
  412. *
  413. * @param user_id 用户的 UserID
  414. * @param user_sig 用户的 UserSig
  415. * @param cb 登录成功与否的回调。票据过期会返回 ERR_USER_SIG_EXPIRED(6206)或者 ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001) 错误码,此时请您生成新的 userSig 重新登录。回调函数定义请参考 @ref TIMCommCallback
  416. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  417. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  418. *
  419. * @note
  420. * 用户登录腾讯后台服务器后才能正常收发消息,登录需要用户提供 UserID、UserSig 等信息,具体含义请参考 [登录鉴权](https://cloud.tencent.com/document/product/269/31999)
  421. */
  422. TIM_API int TIMLogin(const char* user_id, const char* user_sig, TIMCommCallback cb, const void* user_data);
  423. /**
  424. * 5.2 登出
  425. *
  426. * @param cb 登出成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  427. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  428. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  429. *
  430. * @note
  431. * 如用户主动登出或需要进行用户的切换,则需要调用登出操作
  432. */
  433. TIM_API int TIMLogout(TIMCommCallback cb, const void* user_data);
  434. /**
  435. * 5.3 获取登陆用户的 userID
  436. *
  437. * @param user_id_buffer 用户 ID ,出参,分配内存大小不能低于 128 字节,调用接口后,可以读取到以 '\0' 结尾的字符串
  438. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  439. *
  440. * __示例__
  441. * @code{.cpp}
  442. * const size_t kUserIDLength = 128;
  443. * char user_id_buffer[kUserIDLength] = {0};
  444. * TIMGetLoginUserID(user_id_buffer);
  445. * @endcode
  446. */
  447. TIM_API int TIMGetLoginUserID(char* user_id_buffer);
  448. /**
  449. * 5.4 获取登录状态
  450. *
  451. * @return TIMLoginStatus 每个返回值的定义请参考 @ref TIMLoginStatus
  452. *
  453. * @note
  454. * 如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录
  455. */
  456. TIM_API enum TIMLoginStatus TIMGetLoginStatus();
  457. /////////////////////////////////////////////////////////////////////////////////
  458. //
  459. // 六. 用户资料管理相关 API
  460. //
  461. /////////////////////////////////////////////////////////////////////////////////
  462. /**
  463. * 6.1 获取指定用户列表的个人资料
  464. *
  465. * @param json_get_user_profile_list_param 获取指定用户列表的用户资料接口参数的 Json 字符串, Json Key 请参考 @ref FriendShipGetProfileListParam
  466. * @param cb 获取指定用户列表的用户资料成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  467. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  468. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  469. *
  470. * @note
  471. * 可以通过该接口获取任何人的个人资料,包括自己的个人资料。
  472. *
  473. * __示例__
  474. * @code{.cpp}
  475. * Json::Value json_get_user_profile_list_param;
  476. * json_get_user_profile_list_param[kTIMFriendShipGetProfileListParamIdentifierArray].append("user1");
  477. * json_get_user_profile_list_param[kTIMFriendShipGetProfileListParamIdentifierArray].append("user2");
  478. *
  479. * int ret = TIMProfileGetUserProfileList(json_get_user_profile_list_param.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_params, const void* user_data) {
  480. * if (ERR_SUCC != code) {
  481. * // 获取资料列表失败
  482. * return;
  483. * }
  484. * }, nullptr);
  485. * @endcode
  486. */
  487. TIM_API int TIMProfileGetUserProfileList(const char* json_get_user_profile_list_param, TIMCommCallback cb, const void* user_data);
  488. /**
  489. * 6.2 修改自己的个人资料
  490. *
  491. * @param json_modify_self_user_profile_param 修改自己的资料接口参数的 Json 字符串, Json Key 请参考 @ref UserProfileItem
  492. * @param cb 修改自己的资料成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  493. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  494. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  495. *
  496. * @note
  497. * 修改自己的资料时,目前支持修改的字段请参考 @ref UserProfileItem, 一次可更新多个字段。修改自定义字段时填入的key值可以添加 Tag_Profile_Custom_ 前缀,也可以不添加 Tag_Profile_Custom_ 前缀,当不添加时,SDK内部会自动添加该前缀。
  498. *
  499. * __示例__
  500. * @code{.cpp}
  501. * Json::Value modify_item;
  502. * modify_item[kTIMUserProfileItemNickName] = "change my nick name"; // 修改昵称
  503. * modify_item[kTIMUserProfileItemGender] = kTIMGenderType_Female; // 修改性别
  504. * modify_item[kTIMUserProfileItemAddPermission] = kTIMProfileAddPermission_NeedConfirm; // 修改添加好友权限
  505. *
  506. * Json::Value json_user_profile_item_custom;
  507. * json_user_profile_item_custom[kTIMUserProfileCustomStringInfoKey] = "Str"; // 修改个人资料自定义字段 "Str" 的值
  508. * json_user_profile_item_custom[kTIMUserProfileCustomStringInfoValue] = "my define data";
  509. * modify_item[kTIMUserProfileItemCustomStringArray].append(json_user_profile_item_custom);
  510. * int ret = TIMProfileModifySelfUserProfile(modify_item.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_params, const void* user_data) {
  511. * if (ERR_SUCC != code) {
  512. * // 修改自己的个人资料失败
  513. * return;
  514. * }
  515. * }, nullptr);
  516. * @endcode
  517. */
  518. TIM_API int TIMProfileModifySelfUserProfile(const char* json_modify_self_user_profile_param, TIMCommCallback cb, const void* user_data);
  519. /**
  520. * 6.3 订阅用户资料(7.4 及其以上版本支持,需要您购买旗舰版套餐)
  521. *
  522. * @param json_user_id_list 待订阅的用户 ID 列表
  523. * @param cb 订阅用户资料成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  524. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  525. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  526. *
  527. * @note
  528. * - 该接口用于订阅陌生人的资料变更事件,订阅成功后,当订阅用户资料发生变更,您可以通过监听 @ref TIMSetUserInfoChangedCallback 回调来感知
  529. * - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
  530. * - 自己的资料变更通知不需要订阅,默认会通过 @ref TIMSetSelfInfoUpdatedCallback 回调通知给您
  531. * - 好友的资料变更通知不需要订阅,默认会通过 @ref TIMSetUpdateFriendProfileCallback 回调来通知给您
  532. *
  533. * __示例__
  534. * @code{.cpp}
  535. * json::Array json_user_id_list;
  536. * json_user_id_list.push_back("user1");
  537. * json_user_id_list.push_back("user2");
  538. * TIMSubscribeUserInfo(json::Serialize(json_user_id_list).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  539. * Printf("TIMSubscribeUserInfo code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  540. * }, nullptr);
  541. * @endcode
  542. */
  543. TIM_API int TIMSubscribeUserInfo(const char *json_user_id_list, TIMCommCallback cb, const void* user_data);
  544. /**
  545. * 6.4 取消订阅用户资料(7.4 及其以上版本支持,需要您购买旗舰版套餐)
  546. *
  547. * @param json_user_id_list 待取消订阅的用户 ID 列表
  548. * @param cb 订阅用户资料成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  549. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  550. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  551. *
  552. * @note
  553. * - 当 json_user_id_list 为空 或 nullptr 时,取消当前所有的订阅
  554. *
  555. * __示例__
  556. * @code{.cpp}
  557. * json::Array json_user_id_list;
  558. * json_user_id_list.push_back("user1");
  559. * json_user_id_list.push_back("user2");
  560. * TIMUnsubscribeUserInfo(json::Serialize(json_user_id_list).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  561. * Printf("TIMUnsubscribeUserInfo code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  562. * }, nullptr);
  563. * @endcode
  564. */
  565. TIM_API int TIMUnsubscribeUserInfo(const char *json_user_id_list, TIMCommCallback cb, const void* user_data);
  566. /**
  567. * 6.4 搜索云端用户资料(8.4 及以上版本支持)
  568. *
  569. * @param json_user_search_param 用户搜索参数,详见 @ref UserSearchParam 的定义
  570. * @param cb 用户搜索成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  571. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  572. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  573. *
  574. * @note
  575. * - 该功能为 IM 增值功能,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
  576. * - 如果您没有开通该服务,调用接口会返回 60020 错误码
  577. * - 该接口返回的是云端存储的用户资料,包括好友和非好友资料,您可以调用 TIMFriendshipCheckFriendType 接口来判断是否为好友。
  578. *
  579. * __示例__
  580. * @code{.cpp}
  581. * json::Array json_keyword_list;
  582. * json_keyword_list.push_back("abc");
  583. *
  584. * json::Object json_obj;
  585. * json_obj[kTIMUserSearchParamKeywordList] = json_keyword_list;
  586. * json_obj[kTIMUserSearchParamKeywordListMatchType] = TIMKeywordListMatchType_Or;
  587. * json_obj[kTIMUserSearchParamGender] = kTIMGenderType_Unkown;
  588. * json_obj[kTIMUserSearchParamMinBirthday] = 0;
  589. * json_obj[kTIMUserSearchParamMaxBirthday] = 1730774350;
  590. * json_obj[kTIMUserSearchParamSearchCount] = 20;
  591. * json_obj[kTIMUserSearchParamSearchCursor] = "";
  592. * @endcode
  593. *
  594. * __回调的 json_param 示例 (Json Key 请参考 @ref GroupSearchResult)__
  595. * @code{.cpp}
  596. * {
  597. * "user_search_result_is_finished": false,
  598. * "user_search_result_search_cursor": "nvWNvg7lJePQgCQGxYNogjo2PbnxaX1PlRHWSDCCSyA",
  599. * "user_search_result_total_count": 1,
  600. * "user_search_result_user_list":""
  601. * }
  602. * @endcode
  603. */
  604. TIM_API int TIMSearchUsers(const char *json_user_search_param, TIMCommCallback cb, const void* user_data);
  605. /**
  606. * 6.5 查询用户状态(6.3 及其以上版本支持,需要您购买旗舰版套餐)
  607. *
  608. * @param json_identifier_array 用户 ID 列表
  609. * @param cb 查询用户状态成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  610. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  611. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  612. *
  613. * @note
  614. * - 如果您想查询自己的自定义状态,您只需要传入自己的 userID 即可
  615. *
  616. * __示例__
  617. * @code{.cpp}
  618. * json::Array json_array;
  619. * json_array.push_back("user1");
  620. * json_array.push_back("user2");
  621. * TIMGetUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  622. * Printf("TIMGetUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  623. * }, nullptr);
  624. * @endcode
  625. */
  626. TIM_API int TIMGetUserStatus(const char *json_identifier_array, TIMCommCallback cb, const void* user_data);
  627. /**
  628. * 6.6 设置自己的状态,从 6.3 版本开始支持
  629. *
  630. * @param json_current_user_status 待设置的自定义状态,Json Key 请参考 @ref TIMUserStatus
  631. * @param cb 设置自己的状态成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  632. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  633. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  634. *
  635. * @note
  636. * 该接口只支持设置自己的自定义状态,即 kTIMUserStatusCustomStatus 字段,请参考 @ref TIMUserStatus
  637. *
  638. * __示例__
  639. * @code{.cpp}
  640. * json::Object json_current_user_status;
  641. * json_current_user_status[kTIMUserStatusCustomStatus] = "custom status";
  642. * TIMSetSelfStatus(json::Serialize(json_current_user_status).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  643. * Printf("TIMSetSelfStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  644. * }, nullptr);
  645. * @endcode
  646. */
  647. TIM_API int TIMSetSelfStatus(const char *json_current_user_status, TIMCommCallback cb, const void* user_data);
  648. /**
  649. * 6.7 订阅用户状态(6.3 及其以上版本支持,需要您购买旗舰版套餐)
  650. *
  651. * @param json_identifier_array 待订阅的用户 ID 列表
  652. * @param cb 订阅用户状态成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  653. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  654. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  655. *
  656. * @note
  657. * - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @ref TIMSetUserStatusChangedCallback 回调来感知
  658. * - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
  659. * - 该接口不支持订阅自己,您可以通过监听 @ref TIMSetUserStatusChangedCallback 回调来感知自身的自定义状态的变更
  660. * - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
  661. *
  662. * __示例__
  663. * @code{.cpp}
  664. * json::Array json_array;
  665. * json_array.push_back("user1");
  666. * json_array.push_back("user2");
  667. * TIMSubscribeUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  668. * Printf("TIMSubscribeUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  669. * }, nullptr);
  670. * @endcode
  671. */
  672. TIM_API int TIMSubscribeUserStatus(const char *json_identifier_array, TIMCommCallback cb, const void* user_data);
  673. /**
  674. * 6.8 取消订阅用户状态,从 6.3 版本开始支持
  675. *
  676. * @param json_identifier_array 待取消订阅的用户 ID 列表
  677. * @param cb 订阅用户状态成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  678. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  679. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  680. *
  681. * @note
  682. * - 当 json_identifier_array 为空或 nullptr 时,取消当前所有的订阅
  683. *
  684. * __示例__
  685. * @code{.cpp}
  686. * json::Array json_array;
  687. * json_array.push_back("user1");
  688. * json_array.push_back("user2");
  689. * TIMUnsubscribeUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  690. * Printf("TIMUnsubscribeUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  691. * }, nullptr);
  692. * @endcode
  693. */
  694. TIM_API int TIMUnsubscribeUserStatus(const char *json_identifier_array, TIMCommCallback cb, const void* user_data);
  695. // 6.9 更多功能,详见 TIMFriendshipManager.h
  696. /////////////////////////////////////////////////////////////////////////////////
  697. //
  698. // 七. SDK 基础 API 参数相关的 Json Key 定义
  699. //
  700. /////////////////////////////////////////////////////////////////////////////////
  701. //------------------------------------------------------------------------------
  702. // 7.1 SdKConfig(初始化ImSDK的配置)
  703. // string, 只写(选填), 配置文件路径,默认路径为"/"
  704. static const char* kTIMSdkConfigConfigFilePath = "sdk_config_config_file_path";
  705. // string, 只写(选填), 日志文件路径,默认路径为"/"
  706. static const char* kTIMSdkConfigLogFilePath = "sdk_config_log_file_path";
  707. // int64, 只写(选填), 主线程 ID
  708. static const char* kTIMSdkConfigMainThreadID = "sdk_config_main_thread_id";
  709. //------------------------------------------------------------------------------
  710. // 7.2 UserConfig(用户配置信息)
  711. // bool, 只写(选填), 是否禁用本地数据库,true表示禁用,false表示不禁用。默认是false
  712. static const char* kTIMUserConfigIsDisableStorage = "user_config_is_is_disable_storage";
  713. //------------------------------------------------------------------------------
  714. // 7.3 HttpProxyInfo (HTTP 代理配置信息)
  715. // string, 只写(必填), 代理的IP
  716. static const char* kTIMHttpProxyInfoIp = "http_proxy_info_ip";
  717. // int, 只写(必填), 代理的端口
  718. static const char* kTIMHttpProxyInfoPort = "http_proxy_info_port";
  719. // string, 只写(选填), 认证的用户名
  720. static const char* kTIMHttpProxyInfoUserName = "http_proxy_info_username";
  721. // string, 只写(选填), 认证的密码
  722. static const char* kTIMHttpProxyInfoPassword = "http_proxy_info_password";
  723. //------------------------------------------------------------------------------
  724. // 7.4 Socks5ProxyInfo (SOCKS5 代理配置信息)
  725. // string, 只写(必填), socks5代理的IP
  726. static const char* kTIMSocks5ProxyInfoIp = "socks5_proxy_info_ip";
  727. // int, 只写(必填), socks5代理的端口
  728. static const char* kTIMSocks5ProxyInfoPort = "socks5_proxy_info_port";
  729. // string, 只写(选填), 认证的用户名
  730. static const char* kTIMSocks5ProxyInfoUserName = "socks5_proxy_info_username";
  731. // string, 只写(选填), 认证的密码
  732. static const char* kTIMSocks5ProxyInfoPassword = "socks5_proxy_info_password";
  733. //------------------------------------------------------------------------------
  734. // 7.5 PACProxyInfo (PAC 代理配置信息)
  735. // string, 只写(选填), 认证的用户名
  736. static const char* kTIMPACProxyInfoUserName = "pac_proxy_info_username";
  737. // string, 只写(选填), 认证的密码
  738. static const char* kTIMPACProxyInfoPassword = "pac_proxy_info_password";
  739. //------------------------------------------------------------------------------
  740. // 7.6 SetConfig (更新配置)
  741. // uint @ref TIMLogLevel, 只写(选填), 输出到日志文件的日志级别
  742. static const char* kTIMSetConfigLogLevel = "set_config_log_level";
  743. // uint @ref TIMLogLevel, 只写(选填), 日志回调的日志级别
  744. static const char* kTIMSetConfigCallbackLogLevel = "set_config_callback_log_level";
  745. // bool, 只写(选填), 是否输出到控制台,默认为 true
  746. static const char* kTIMSetConfigIsLogOutputConsole = "set_config_is_log_output_console";
  747. // object @ref UserConfig, 只写(选填), 用户配置
  748. static const char* kTIMSetConfigUserConfig = "set_config_user_config";
  749. // string, 只写(选填), 自定义数据,如果需要,初始化前设置
  750. // @note
  751. // - 开发者可以自定义的数据(长度限制为64个字节),ImSDK只负责透传给即时通信IM后台后,可以通过第三方回调 [状态变更回调](https://cloud.tencent.com/document/product/269/2570)告知开发者业务后台。
  752. static const char* kTIMSetConfigUserDefineData = "set_config_user_define_data";
  753. // object @ref HttpProxyInfo, 只写(选填), 设置HTTP代理,如果需要,在发送图片、文件、语音、视频前设置
  754. // @note
  755. // - HTTP代理主要用在发送图片、语音、文件、微视频等消息时,将相关文件上传到COS,以及接收到图片、语音、文件、微视频等消息,将相关文件下载到本地时用到
  756. // - 设置时,设置的IP不能为空,端口不能为0(0端口不可用).如果需要取消HTTP代理,只需将代理的IP设置为空字符串,端口设置为0
  757. static const char* kTIMSetConfigHttpProxyInfo = "set_config_http_proxy_info";
  758. // object @ref Socks5ProxyInfo, 只写(选填), 设置SOCKS5代理,如果需要,初始化前设置
  759. // @note
  760. // - SOCKS5代理需要在初始化之前设置。设置之后ImSDK发送的所有协议会通过SOCKS5代理服务器发送的即时通信IM后台
  761. static const char* kTIMSetConfigSocks5ProxyInfo = "set_config_socks5_proxy_info";
  762. // object @ref PACProxyInfo, 只写(选填), 设置PAC代理,如果需要,初始化前设置
  763. static const char* kTIMSetConfigPACProxyInfo = "set_config_pac_proxy_info";
  764. // bool, 只写(选填), 如果为true,SDK内部会在选择最优IP时只使用LocalDNS
  765. static const char* kTIMSetConfigIsOnlyLocalDNSSource = "set_config_is_only_local_dns_source";
  766. /////////////////////////////////////////////////////////////////////////////////
  767. //
  768. // 八. 用户资料 API 参数相关的 Json Key 定义
  769. //
  770. /////////////////////////////////////////////////////////////////////////////////
  771. //------------------------------------------------------------------------------
  772. // 8.1 FriendShipGetProfileListParam (获取指定用户列表的个人资料的参数)
  773. // array string, 只写, 想要获取目标用户资料的UserID列表
  774. static const char* kTIMFriendShipGetProfileListParamIdentifierArray = "friendship_getprofilelist_param_identifier_array";
  775. //------------------------------------------------------------------------------
  776. // 8.2 TIMUserStatus (用户状态)
  777. // string, 只读, 用户 ID
  778. static const char* kTIMUserStatusIdentifier = "user_status_identifier";
  779. // uint @ref TIMUserStatusType, 只读, 用户的状态
  780. static const char* kTIMUserStatusStatusType = "user_status_status_type";
  781. // string, 读写, 用户的自定义状态
  782. static const char* kTIMUserStatusCustomStatus = "user_status_custom_status";
  783. // array, 只读, 用户在线终端
  784. static const char* kTIMUserStatusOnlineDevices = "user_status_online_devices";
  785. //------------------------------------------------------------------------------
  786. // 8.3 UserProfile (用户个人资料)
  787. // string, 只读, 用户ID
  788. static const char* kTIMUserProfileIdentifier = "user_profile_identifier";
  789. // string, 只读, 用户的昵称
  790. static const char* kTIMUserProfileNickName = "user_profile_nick_name";
  791. // uint @ref TIMGenderType, 只读, 性别
  792. static const char* kTIMUserProfileGender = "user_profile_gender";
  793. // string, 只读, 用户头像URL
  794. static const char* kTIMUserProfileFaceUrl = "user_profile_face_url";
  795. // string, 只读, 用户好友备注(请注意,本字段仅在消息的发送者资料中提供)
  796. static const char* kTIMUserProfileFriendRemark = "user_profile_friend_remark";
  797. // string, 只读, 用户个人签名
  798. static const char* kTIMUserProfileSelfSignature = "user_profile_self_signature";
  799. // uint @ref TIMProfileAddPermission, 只读, 用户加好友的选项
  800. static const char* kTIMUserProfileAddPermission = "user_profile_add_permission";
  801. // string, 只读, 用户位置信息
  802. static const char* kTIMUserProfileLocation = "user_profile_location";
  803. // uint, 只读, 语言
  804. static const char* kTIMUserProfileLanguage = "user_profile_language";
  805. // uint, 只读, 生日
  806. static const char* kTIMUserProfileBirthDay = "user_profile_birthday";
  807. // uint, 只读, 等级
  808. static const char* kTIMUserProfileLevel = "user_profile_level";
  809. // uint, 只读, 角色
  810. static const char* kTIMUserProfileRole = "user_profile_role";
  811. // array @ref UserProfileCustomStringInfo, 只读, 请参考 [自定义资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.87.AA.E5.AE.9A.E4.B9.89.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5)
  812. static const char* kTIMUserProfileCustomStringArray = "user_profile_custom_string_array";
  813. //------------------------------------------------------------------------------
  814. // 8.4 UserProfileItem (用户自身资料可修改的各个项)
  815. // string, 只写, 修改用户昵称
  816. static const char* kTIMUserProfileItemNickName = "user_profile_item_nick_name";
  817. // uint @ref TIMGenderType, 只写, 修改用户性别
  818. static const char* kTIMUserProfileItemGender = "user_profile_item_gender";
  819. // string, 只写, 修改用户头像
  820. static const char* kTIMUserProfileItemFaceUrl = "user_profile_item_face_url";
  821. // string, 只写, 修改用户签名
  822. static const char* kTIMUserProfileItemSelfSignature = "user_profile_item_self_signature";
  823. // uint @ref TIMProfileAddPermission, 只写, 修改用户加好友的选项
  824. static const char* kTIMUserProfileItemAddPermission = "user_profile_item_add_permission";
  825. // string, 只写, 修改位置
  826. static const char* kTIMUserProfileItemLocation = "user_profile_item_location";
  827. // uint, 只写, 修改语言
  828. static const char* kTIMUserProfileItemLanguage = "user_profile_item_language";
  829. // uint, 只写, 修改生日
  830. static const char* kTIMUserProfileItemBirthDay = "user_profile_item_birthday";
  831. // uint, 只写, 修改等级
  832. static const char* kTIMUserProfileItemLevel = "user_profile_item_level";
  833. // uint, 只写, 修改角色
  834. static const char* kTIMUserProfileItemRole = "user_profile_item_role";
  835. // array @ref UserProfileCustomStringInfo, 只写, 修改 [自定义资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.87.AA.E5.AE.9A.E4.B9.89.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5)
  836. static const char* kTIMUserProfileItemCustomStringArray = "user_profile_item_custom_string_array";
  837. //------------------------------------------------------------------------------
  838. // 8.5 UserProfileCustomStringInfo (用户自定义资料字段,字符串)
  839. // string, 只写, 用户自定义资料字段的key值(包含前缀 Tag_Profile_Custom_)
  840. static const char* kTIMUserProfileCustomStringInfoKey = "user_profile_custom_string_info_key";
  841. // string, 只写, 该字段对应的字符串值, 字符串长度不得超过500字节
  842. static const char* kTIMUserProfileCustomStringInfoValue = "user_profile_custom_string_info_value";
  843. //------------------------------------------------------------------------------
  844. // 8.6 ProfileChangeElem (资料变更通知)
  845. // uint @ref TIMProfileChangeType, 只读, 资料变更类型
  846. static const char* kTIMProfileChangeElemChangeType = "profile_change_elem_change_type";
  847. // string, 只读, 资料变更用户的UserID
  848. static const char* kTIMProfileChangeElemFromIdentifier = "profile_change_elem_from_identifier";
  849. // object @ref UserProfileItem, 只读, 具体的变更信息,只有当 kTIMProfileChangeElemChangeType 为 kTIMProfileChange_Profile 时有效
  850. static const char* kTIMProfileChangeElemUserProfileItem = "profile_change_elem_user_profile_item";
  851. //------------------------------------------------------------------------------
  852. // 8.7 UserSearchParam (用户搜索字段)
  853. // array , 搜索的关键字列表,关键字列表最多支持 5 个,keyword 会自动匹配用户 ID、昵称。
  854. static const char* kTIMUserSearchParamKeywordList = "user_search_param_keyword_list";
  855. // uint @ref TIMKeywordListMatchType, 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索.
  856. static const char* kTIMUserSearchParamKeywordListMatchType = "user_search_param_keyword_list_match_type";
  857. // uint @ref TIMGenderType, 用户性别(如果不设置,默认男性和女性都会返回)
  858. static const char* kTIMUserSearchParamGender = "user_search_param_gender";
  859. // uint , 用户最小生日(如果不设置,默认值为 0)
  860. static const char* kTIMUserSearchParamMinBirthday = "user_search_param_min_birthday";
  861. // uint , 用户最大生日(如果不设置,默认 birthday >= minBirthday 的用户都会返回)
  862. static const char* kTIMUserSearchParamMaxBirthday = "user_search_param_max_birthday";
  863. // uint , 每次云端搜索返回结果的条数(必须大于 0,最大支持 100,默认 20)
  864. static const char* kTIMUserSearchParamSearchCount = "user_search_param_search_count";
  865. // string , 每次云端搜索的起始位置。第一次填空字符串,续拉时填写 UserSearchResult 中的返回值。
  866. static const char* kTIMUserSearchParamSearchCursor = "user_search_param_search_cursor";
  867. //------------------------------------------------------------------------------
  868. // 8.8 UserSearchResult (用户搜索结果)
  869. // bool , 是否已经返回全部满足搜索条件的用户列表
  870. static const char* kTIMUserSearchResultIsFinished = "user_search_result_is_finished";
  871. // uint , 满足搜索条件的用户总数量
  872. static const char* kTIMUserSearchResultTotalCount = "user_search_result_total_count";
  873. // string , 下一次云端搜索的起始位置
  874. static const char* kTIMUserSearchResultNextCursor = "user_search_result_next_cursor";
  875. // array @ref UserProfile, 当前一次云端搜索返回的用户列表
  876. static const char* kTIMUserSearchResultUserList = "user_search_result_user_list";
  877. /////////////////////////////////////////////////////////////////////////////////
  878. //
  879. // 九. 废弃字段
  880. //
  881. /////////////////////////////////////////////////////////////////////////////////
  882. // 9.1 群组信息标识
  883. enum TIMGroupGetInfoFlag {
  884. // 未定义
  885. kTIMGroupInfoFlag_None = 0x00,
  886. // 群组名称
  887. kTIMGroupInfoFlag_Name = 0x01,
  888. // 群组创建时间
  889. kTIMGroupInfoFlag_CreateTime = 0x01 << 1,
  890. // 群组创建者账号
  891. kTIMGroupInfoFlag_OwnerUin = 0x01 << 2,
  892. // 消息的 seq
  893. kTIMGroupInfoFlag_Seq = 0x01 << 3,
  894. // 群组信息最后修改时间
  895. kTIMGroupInfoFlag_LastTime = 0x01 << 4,
  896. // 下一条消息的 seq
  897. kTIMGroupInfoFlag_NextMsgSeq = 0x01 << 5,
  898. // 最新群组消息时间
  899. kTIMGroupInfoFlag_LastMsgTime = 0X01 << 6,
  900. // SdkAppID
  901. kTIMGroupInfoFlag_AppId = 0x01 << 7,
  902. // 群组成员数量
  903. kTIMGroupInfoFlag_MemberNum = 0x01 << 8,
  904. // 群组成员最大数量
  905. kTIMGroupInfoFlag_MaxMemberNum = 0x01 << 9,
  906. // 群公告内容
  907. kTIMGroupInfoFlag_Notification = 0x01 << 10,
  908. // 群简介内容
  909. kTIMGroupInfoFlag_Introduction = 0x01 << 11,
  910. // 群头像URL
  911. kTIMGroupInfoFlag_FaceUrl = 0x01 << 12,
  912. // 加群选项
  913. kTIMGroupInfoFlag_AddOption = 0x01 << 13,
  914. // 群类型
  915. kTIMGroupInfoFlag_GroupType = 0x01 << 14,
  916. // 群组内最新一条消息
  917. kTIMGroupInfoFlag_LastMsg = 0x01 << 15,
  918. // 群组在线成员数
  919. kTIMGroupInfoFlag_OnlineNum = 0x01 << 16,
  920. // 群组是否可见
  921. kTIMGroupInfoFlag_Visible = 0x01 << 17,
  922. // 群组是否可以搜索
  923. kTIMGroupInfoFlag_Searchable = 0x01 << 18,
  924. // 群组是否全禁言
  925. kTIMGroupInfoFlag_ShutupAll = 0x01 << 19,
  926. };
  927. // 9.2 群组成员信息标识
  928. enum TIMGroupMemberInfoFlag {
  929. // 无
  930. kTIMGroupMemberInfoFlag_None = 0x00,
  931. // 加入时间
  932. kTIMGroupMemberInfoFlag_JoinTime = 0x01,
  933. // 群消息接收选项
  934. kTIMGroupMemberInfoFlag_MsgFlag = 0x01 << 1,
  935. // 成员已读消息seq
  936. kTIMGroupMemberInfoFlag_MsgSeq = 0x01 << 2,
  937. // 成员角色
  938. kTIMGroupMemberInfoFlag_MemberRole = 0x01 << 3,
  939. // 禁言时间。当该值为0时表示没有被禁言
  940. kTIMGroupMemberInfoFlag_ShutupUntill = 0x01 << 4,
  941. // 群名片
  942. kTIMGroupMemberInfoFlag_NameCard = 0x01 << 5,
  943. };
  944. //------------------------------------------------------------------------------
  945. // 9.3 GroupGetInfoOption(获取群组信息的选项)
  946. // uint64 @ref TIMGroupGetInfoFlag, 读写(选填), 根据想要获取的信息过滤,默认值为0xffffffff(获取全部信息)
  947. static const char* kTIMGroupGetInfoOptionInfoFlag = "group_get_info_option_info_flag";
  948. // array string, 只写(选填), 想要获取的群组自定义字段列表,请参考 [群组自定义字段](https://cloud.tencent.com/document/product/269/1502#.E8.87.AA.E5.AE.9A.E4.B9.89.E5.AD.97.E6.AE.B5)
  949. static const char* kTIMGroupGetInfoOptionCustomArray = "group_get_info_option_custom_array";
  950. //------------------------------------------------------------------------------
  951. // 9.4 SdKConfig(初始化ImSDK的配置, 已废弃的部分)
  952. // uint64, 只写(选填), 配置Android平台的Java虚拟机指针
  953. static const char* kTIMSdkConfigJavaVM = "sdk_config_java_vm";
  954. //------------------------------------------------------------------------------
  955. // 9.5 UserConfig(用户配置信息,已废弃的部分)
  956. // bool, 只写(选填), true表示要收已读回执事件
  957. static const char* kTIMUserConfigIsReadReceipt = "user_config_is_read_receipt";
  958. // bool, 只写(选填), true表示群tips不计入群消息已读计数
  959. static const char* kTIMUserConfigIsIgnoreGroupTipsUnRead = "user_config_is_ignore_grouptips_unread";
  960. // bool, 只写(选填), true表示服务端要删掉已读状态
  961. static const char* kTIMUserConfigIsSyncReport = "user_config_is_sync_report";
  962. // object @ref GroupGetInfoOption, 只写(选填),获取群组信息默认选项
  963. static const char* kTIMUserConfigGroupGetInfoOption = "user_config_group_getinfo_option";
  964. // object @ref GroupMemberGetInfoOption, 只写(选填),获取群组成员信息默认选项
  965. static const char* kTIMUserConfigGroupMemberGetInfoOption = "user_config_group_member_getinfo_option";
  966. //------------------------------------------------------------------------------
  967. // 9.6 FriendShipGetProfileListParam (获取指定用户列表的个人资料的参数,已废弃的部分)
  968. // bool, 只写, 是否强制更新。false表示优先从本地缓存获取,获取不到则去网络上拉取。true表示直接去网络上拉取资料。默认为false
  969. static const char* kTIMFriendShipGetProfileListParamForceUpdate = "friendship_getprofilelist_param_force_update";
  970. //------------------------------------------------------------------------------
  971. // 9.7 以下为老版本拼写错误,为了兼容老版本而保留的宏定义
  972. // enum TIMGroupGetInfoFlag
  973. #define kTIMGroupInfoFlag_AddOpton kTIMGroupInfoFlag_AddOption
  974. // enum TIMGenderType
  975. #define kTIMGenderType_Unkown kTIMGenderType_Unknown
  976. // UserConfig JsonKey
  977. #define kTIMUserConfigIsIngoreGroupTipsUnRead kTIMUserConfigIsIgnoreGroupTipsUnRead
  978. // SetConfig JsonKey
  979. #define kTIMSetConfigCackBackLogLevel kTIMSetConfigCallbackLogLevel
  980. // ProfileChangeElem JsonKey
  981. #define kTIMProfileChangeElemFromIndentifier kTIMProfileChangeElemFromIdentifier
  982. // UserProfileCustomStringInfo JsonKey
  983. #define kTIMUserProfileCustemStringInfoKey kTIMUserProfileCustomStringInfoKey
  984. #define kTIMUserProfileCustemStringInfoValue kTIMUserProfileCustomStringInfoValue
  985. // UserProfileItem JsonKey
  986. #define kTIMUserProfileItemLoaction kTIMUserProfileItemLocation
  987. // GroupMemberInfo JsonKey
  988. #define kTIMGroupMemberInfoRemark kTIMGroupMemberInfoFriendRemark
  989. // TIMUserStatus JsonKey
  990. #define KTIMUserStatusOnlineDevices kTIMUserStatusOnlineDevices
  991. #ifdef __cplusplus
  992. }
  993. #endif // __cplusplus
  994. #endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_MANAGER_H_