IMSDK
即时通信 IM 提供全球接入、单聊、群聊、消息推送、资料关系链托管、账号鉴权等全方位解决方案,并提供完备的 App 接入、后台管理接口。
TIMManagerFunction.h 文件参考

类型定义

typedef void(* TIMNetworkStatusListenerCallback) (enum TIMNetworkStatus status, int32_t code, const char *desc, const void *user_data)
 
typedef void(* TIMKickedOfflineCallback) (const void *user_data)
 
typedef void(* TIMUserSigExpiredCallback) (const void *user_data)
 
typedef void(* TIMSelfInfoUpdatedCallback) (const char *json_user_profile, const void *user_data)
 
typedef void(* TIMUserStatusChangedCallback) (const char *json_user_status_array, const void *user_data)
 
typedef void(* TIMUserInfoChangedCallback) (const char *json_user_info_array, const void *user_data)
 
typedef void(* TIMLogCallback) (enum TIMLogLevel level, const char *log, const void *user_data)
 

函数

TIM_API void TIMSetNetworkStatusListenerCallback (TIMNetworkStatusListenerCallback cb, const void *user_data)
 
TIM_API void TIMSetKickedOfflineCallback (TIMKickedOfflineCallback cb, const void *user_data)
 
TIM_API void TIMSetUserSigExpiredCallback (TIMUserSigExpiredCallback cb, const void *user_data)
 
TIM_API void TIMSetSelfInfoUpdatedCallback (TIMSelfInfoUpdatedCallback cb, const void *user_data)
 
TIM_API void TIMSetUserStatusChangedCallback (TIMUserStatusChangedCallback cb, const void *user_data)
 
TIM_API void TIMSetUserInfoChangedCallback (TIMUserInfoChangedCallback cb, const void *user_data)
 
TIM_API void TIMSetLogCallback (TIMLogCallback cb, const void *user_data)
 
TIM_API int TIMInit (uint64_t sdk_app_id, const char *json_sdk_config)
 
TIM_API int TIMUninit (void)
 
TIM_API const char * TIMGetSDKVersion (void)
 
TIM_API uint64_t TIMGetServerTime ()
 
TIM_API int TIMSetConfig (const char *json_config, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMLogin (const char *user_id, const char *user_sig, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMLogout (TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMGetLoginUserID (char *user_id_buffer)
 
TIM_API TIMLoginStatus TIMGetLoginStatus ()
 
TIM_API int TIMProfileGetUserProfileList (const char *json_get_user_profile_list_param, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMProfileModifySelfUserProfile (const char *json_modify_self_user_profile_param, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMSubscribeUserInfo (const char *json_user_id_list, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMUnsubscribeUserInfo (const char *json_user_id_list, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMGetUserStatus (const char *json_identifier_array, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMSetSelfStatus (const char *json_current_user_status, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMSubscribeUserStatus (const char *json_identifier_array, TIMCommCallback cb, const void *user_data)
 
TIM_API int TIMUnsubscribeUserStatus (const char *json_identifier_array, TIMCommCallback cb, const void *user_data)
 

类型定义说明

◆ TIMNetworkStatusListenerCallback

typedef void(* TIMNetworkStatusListenerCallback) (enum TIMNetworkStatus status, int32_t code, const char *desc, const void *user_data)

1.1 网络状态回调

参数
status网络状态,请参考 TIMNetworkStatus
code值为ERR_SUCC表示成功,其他值表示失败。详情请参考 错误码
desc错误描述字符串
user_dataImSDK负责透传的用户自定义数据,未做任何处理

感知网络状态的回调处理示例

void NetworkStatusListenerCallback(TIMNetworkStatus status, int32_t code, const char* desc, const void* user_data) {
switch(status) {
case kTIMConnected: {
printf("OnConnected ! user_data:0x%08x", user_data);
break;
}
case kTIMDisconnected:{
printf("OnDisconnected ! user_data:0x%08x", user_data);
break;
}
case kTIMConnecting:{
printf("OnConnecting ! user_data:0x%08x", user_data);
break;
}
case kTIMConnectFailed:{
printf("ConnectFailed code:%u desc:%s ! user_data:0x%08x", code, desc, user_data);
break;
}
}
}

◆ TIMKickedOfflineCallback

typedef void(* TIMKickedOfflineCallback) (const void *user_data)

1.2 被踢下线回调

参数
user_dataImSDK负责透传的用户自定义数据,未做任何处理

◆ TIMUserSigExpiredCallback

typedef void(* TIMUserSigExpiredCallback) (const void *user_data)

1.3 用户票据过期回调

参数
user_dataImSDK负责透传的用户自定义数据,未做任何处理

◆ TIMSelfInfoUpdatedCallback

typedef void(* TIMSelfInfoUpdatedCallback) (const char *json_user_profile, const void *user_data)

1.4 当前用户的资料更新的回调

参数
json_user_profile当前用户的资料,请参考 UserProfile
user_dataImSDK负责透传的用户自定义数据,未做任何处理

◆ TIMUserStatusChangedCallback

typedef void(* TIMUserStatusChangedCallback) (const char *json_user_status_array, const void *user_data)

1.5 用户状态变更的回调

参数
json_user_status_array用户状态的列表,用户状态请参考 TIMUserStatus
user_dataImSDK负责透传的用户自定义数据,未做任何处理

◆ TIMUserInfoChangedCallback

typedef void(* TIMUserInfoChangedCallback) (const char *json_user_info_array, const void *user_data)

1.6 订阅用户资料变更的回调

参数
json_user_info_array订阅用户资料更新列表,用户资料请参考 UserProfile
user_dataImSDK负责透传的用户自定义数据,未做任何处理

◆ TIMLogCallback

typedef void(* TIMLogCallback) (enum TIMLogLevel level, const char *log, const void *user_data)

1.7 日志回调

参数
level日志级别,请参考 TIMLogLevel
log日志字符串
user_dataImSDK负责透传的用户自定义数据,未做任何处理

函数说明

◆ TIMSetNetworkStatusListenerCallback()

TIM_API void TIMSetNetworkStatusListenerCallback ( TIMNetworkStatusListenerCallback  cb,
const void *  user_data 
)

2.1 设置网络连接状态监听回调

参数
cb连接事件回调,请参考 TIMNetworkStatusListenerCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
  • 当调用接口 TIMInit 时,ImSDK会去连接云后台。此接口设置的回调用于监听网络连接的状态。
  • 网络连接状态包含四个:正在连接、连接失败、连接成功、已连接。这里的网络事件不表示用户本地网络状态,仅指明ImSDK是否与即时通信IM云Server连接状态。
  • 可选设置,如果要用户感知是否已经连接服务器,需要设置此回调,用于通知调用者跟通讯后台链接的连接和断开事件,另外,如果断开网络,等网络恢复后会自动重连,自动拉取消息通知用户,用户无需关心网络状态,仅作通知之用
  • 只要用户处于登录状态,ImSDK内部会进行断网重连,用户无需关心。

◆ TIMSetKickedOfflineCallback()

TIM_API void TIMSetKickedOfflineCallback ( TIMKickedOfflineCallback  cb,
const void *  user_data 
)

2.2 设置被踢下线通知回调

参数
cb踢下线回调,请参考 TIMKickedOfflineCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
用户如果在其他终端登录,会被踢下线,这时会收到用户被踢下线的通知,出现这种情况常规的做法是提示用户进行操作(退出,或者再次把对方踢下线)。 用户如果在离线状态下被踢,下次登录将会失败,可以给用户一个非常强的提醒(登录错误码ERR_IMSDK_KICKED_BY_OTHERS:6208),开发者也可以选择忽略这次错误,再次登录即可。 用户在线情况下的互踢情况:
  • 用户在设备1登录,保持在线状态下,该用户又在设备2登录,这时用户会在设备1上强制下线,收到 TIMKickedOfflineCallback 回调。 用户在设备1上收到回调后,提示用户,可继续调用login上线,强制设备2下线。这里是在线情况下互踢过程。 用户离线状态互踢:
  • 用户在设备1登录,没有进行logout情况下进程退出。该用户在设备2登录,此时由于用户不在线,无法感知此事件, 为了显式提醒用户,避免无感知的互踢,用户在设备1重新登录时,会返回(ERR_IMSDK_KICKED_BY_OTHERS:6208)错误码,表明之前被踢,是否需要把对方踢下线。 如果需要,则再次调用login强制上线,设备2的登录的实例将会收到 TIMKickedOfflineCallback 回调。

◆ TIMSetUserSigExpiredCallback()

TIM_API void TIMSetUserSigExpiredCallback ( TIMUserSigExpiredCallback  cb,
const void *  user_data 
)

2.3 设置票据过期回调

参数
cb票据过期回调,请参考 TIMUserSigExpiredCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
用户票据,可能会存在过期的情况,如果用户票据过期,此接口设置的回调会调用。 同时, TIMLogin 也将会返回 70001 错误码。开发者可根据错误码或者票据过期回调进行票据更换

◆ TIMSetSelfInfoUpdatedCallback()

TIM_API void TIMSetSelfInfoUpdatedCallback ( TIMSelfInfoUpdatedCallback  cb,
const void *  user_data 
)

2.4 设置当前用户资料更新回调

参数
cb当前用户的资料更新的回调,请参考 TIMSelfInfoUpdatedCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理

◆ TIMSetUserStatusChangedCallback()

TIM_API void TIMSetUserStatusChangedCallback ( TIMUserStatusChangedCallback  cb,
const void *  user_data 
)

2.5 设置用户状态变更回调

参数
cb用户状态变更的回调,请参考 TIMUserStatusChangedCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
收到通知的情况:
  1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
  2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
  3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调

◆ TIMSetUserInfoChangedCallback()

TIM_API void TIMSetUserInfoChangedCallback ( TIMUserInfoChangedCallback  cb,
const void *  user_data 
)

2.6 设置用户资料变更回调

参数
cb用户资料更新的回调,请参考 TIMUserInfoChangedCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
仅当通过 TIMSubscribeUserInfo 成功订阅的用户(仅限非好友用户)的资料发生变更时,才会激活此回调函数

◆ TIMSetLogCallback()

TIM_API void TIMSetLogCallback ( TIMLogCallback  cb,
const void *  user_data 
)

2.7 设置日志回调

参数
cb日志回调,请参考 TIMLogCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
注意
  • 设置日志监听的回调之后,ImSDK内部的日志会回传到此接口设置的回调。
  • 开发者可以通过接口 TIMSetConfig 配置哪些日志级别的日志回传到回调函数。

◆ TIMInit()

TIM_API int TIMInit ( uint64_t  sdk_app_id,
const char *  json_sdk_config 
)

3.1 ImSDK初始化

参数
sdk_app_id官网申请的SDKAppid
json_sdk_configImSDK配置选项 Json 字符串, Json Key请参考 SdkConfig
返回
int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
  • 在使用ImSDK进一步操作之前,需要先初始化ImSDK
  • json_sdk_config 可以为 NULL 空字符串指针或者""空字符串,在此情况下 SdkConfig 均为默认值。
  • json_sdk_config 里面的每个Json key都是选填的,详情请参考 SdkConfig
  • kTIMSdkConfigLogFilePath 和 kTIMSdkConfigConfigFilePath 的值要求是 UTF-8 编码

示例

Json::Value json_value_init;
json_value_init[kTIMSdkConfigLogFilePath] = "D:\\";
json_value_init[kTIMSdkConfigConfigFilePath] = "D:\\";
uint64_t sdk_app_id = 1234567890;
if (TIM_SUCC != TIMInit(sdk_app_id, json_value_init.toStyledString().c_str())) {
// TIMInit 接口调用错误,ImSDK初始化失败
}
// json_value_init.toStyledString() 得到 json_sdk_config JSON 字符串如下
{
"sdk_config_config_file_path" : "D:\\",
"sdk_config_log_file_path" : "D:\\"
}

◆ TIMUninit()

TIM_API int TIMUninit ( void  )

3.2 ImSDK 反初始化

返回
int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
卸载DLL或退出进程前需此接口卸载ImSDK,清理ImSDK相关资源

示例

if (TIM_SUCC != TIMUninit()) {
// ImSDK 反初始化失败
}

◆ TIMGetSDKVersion()

TIM_API const char* TIMGetSDKVersion ( void  )

3.3 获取 ImSDK 版本号

返回
const char* 返回 ImSDK 的版本号

◆ TIMGetServerTime()

TIM_API uint64_t TIMGetServerTime ( )

3.4 获取服务器当前时间

返回
uint64_t 服务器时间,单位 s
注意
可用于信令离线推送场景下超时判断

◆ TIMSetConfig()

TIM_API int TIMSetConfig ( const char *  json_config,
TIMCommCallback  cb,
const void *  user_data 
)

3.5 设置额外的用户配置

参数
json_config配置选项
cb返回设置配置之后所有配置的回调,此回调cb可为空,表示不获取所有配置信息。回调函数定义和参数解析请参考 TIMCommCallback
user_data用户自定义数据,ImSDK 只负责传回给回调函数 cb,不做任何处理
返回
int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
  • 目前支持设置的配置有 http 代理的 IP 和端口、socks5 代理的 IP 和端口、输出日志的级别等。
  • http 代理的 IP 和端口、socks5 代理的 IP 和端口建议调用 TIMInit 之前配置。
  • 每项配置可以单独设置,也可以一起配置,详情请参考 SetConfig

设置 http 代理示例

Json::Value json_http_proxy;
json_http_proxy[kTIMHttpProxyInfoIp] = "http://http-proxy.xxxxx.com";
json_http_proxy[kTIMHttpProxyInfoPort] = 8888;
json_http_proxy[kTIMHttpProxyInfoUserName] = "User-01";
json_http_proxy[kTIMHttpProxyInfoPassword] = "123456";
Json::Value json_config;
json_config[kTIMSetConfigHttpProxyInfo] = json_http_proxy;
if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
// 回调内部
}, this)) {
// TIMSetConfig接口调用失败
}

设置 socks5 代理示例

Json::Value json_socks5_value;
json_socks5_value[kTIMSocks5ProxyInfoIp] = "111.222.333.444";
json_socks5_value[kTIMSocks5ProxyInfoPort] = 8888;
json_socks5_value[kTIMSocks5ProxyInfoUserName] = "";
json_socks5_value[kTIMSocks5ProxyInfoPassword] = "";
Json::Value json_config;
json_config[kTIMSetConfigSocks5ProxyInfo] = json_socks5_value;
if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
// 回调内部
}, this)) {
//TIMSetConfig接口调用失败
}

设置 pac 代理示例

Json::Value json_pac_value;
json_pac_value[kTIMPACProxyInfoUserName] = "";
json_pac_value[kTIMPACProxyInfoPassword] = "";
Json::Value json_config;
json_config[kTIMSetConfigPACProxyInfo] = json_pac_value;
if (TIM_SUCC != TIMSetConfig(json_config.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
// 回调内部
}, this)) {
//TIMSetConfig接口调用失败
}

◆ TIMLogin()

TIM_API int TIMLogin ( const char *  user_id,
const char *  user_sig,
TIMCommCallback  cb,
const void *  user_data 
)

4.1 登录

参数
user_id用户的 UserID
user_sig用户的 UserSig
cb登录成功与否的回调。票据过期会返回 ERR_USER_SIG_EXPIRED(6206)或者 ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001) 错误码,此时请您生成新的 userSig 重新登录。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
用户登录腾讯后台服务器后才能正常收发消息,登录需要用户提供 UserID、UserSig 等信息,具体含义请参考 登录鉴权

◆ TIMLogout()

TIM_API int TIMLogout ( TIMCommCallback  cb,
const void *  user_data 
)

4.2 登出

参数
cb登出成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
如用户主动登出或需要进行用户的切换,则需要调用登出操作

◆ TIMGetLoginUserID()

TIM_API int TIMGetLoginUserID ( char *  user_id_buffer)

4.3 获取登陆用户的 userID

参数
user_id_buffer用户 ID ,出参,分配内存大小不能低于 128 字节,调用接口后,可以读取到以 '\0' 结尾的字符串
返回
int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 TIMResult

示例

const size_t kUserIDLength = 128;
char user_id_buffer[kUserIDLength] = {0};
TIMGetLoginUserID(user_id_buffer);

◆ TIMGetLoginStatus()

TIM_API TIMLoginStatus TIMGetLoginStatus ( )

4.4 获取登录状态

返回
TIMLoginStatus 每个返回值的定义请参考 TIMLoginStatus
注意
如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录

◆ TIMProfileGetUserProfileList()

TIM_API int TIMProfileGetUserProfileList ( const char *  json_get_user_profile_list_param,
TIMCommCallback  cb,
const void *  user_data 
)

5.1 获取指定用户列表的个人资料

参数
json_get_user_profile_list_param获取指定用户列表的用户资料接口参数的 Json 字符串, Json Key 请参考 FriendShipGetProfileListParam
cb获取指定用户列表的用户资料成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
可以通过该接口获取任何人的个人资料,包括自己的个人资料。

示例

Json::Value json_get_user_profile_list_param;
json_get_user_profile_list_param[kTIMFriendShipGetProfileListParamIdentifierArray].append("user1");
json_get_user_profile_list_param[kTIMFriendShipGetProfileListParamIdentifierArray].append("user2");
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) {
if (ERR_SUCC != code) {
// 获取资料列表失败
return;
}
}, nullptr);

◆ TIMProfileModifySelfUserProfile()

TIM_API int TIMProfileModifySelfUserProfile ( const char *  json_modify_self_user_profile_param,
TIMCommCallback  cb,
const void *  user_data 
)

5.2 修改自己的个人资料

参数
json_modify_self_user_profile_param修改自己的资料接口参数的 Json 字符串, Json Key 请参考 UserProfileItem
cb修改自己的资料成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
修改自己的资料时,目前支持修改的字段请参考 UserProfileItem, 一次可更新多个字段。修改自定义字段时填入的key值可以添加 Tag_Profile_Custom_ 前缀,也可以不添加 Tag_Profile_Custom_ 前缀,当不添加时,SDK内部会自动添加该前缀。

示例

Json::Value modify_item;
modify_item[kTIMUserProfileItemNickName] = "change my nick name"; // 修改昵称
modify_item[kTIMUserProfileItemGender] = kTIMGenderType_Female; // 修改性别
modify_item[kTIMUserProfileItemAddPermission] = kTIMProfileAddPermission_NeedConfirm; // 修改添加好友权限
Json::Value json_user_profile_item_custom;
json_user_profile_item_custom[kTIMUserProfileCustomStringInfoKey] = "Str"; // 修改个人资料自定义字段 "Str" 的值
json_user_profile_item_custom[kTIMUserProfileCustomStringInfoValue] = "my define data";
modify_item[kTIMUserProfileItemCustomStringArray].append(json_user_profile_item_custom);
int ret = TIMProfileModifySelfUserProfile(modify_item.toStyledString().c_str(), [](int32_t code, const char* desc, const char* json_params, const void* user_data) {
if (ERR_SUCC != code) {
// 修改自己的个人资料失败
return;
}
}, nullptr);

◆ TIMSubscribeUserInfo()

TIM_API int TIMSubscribeUserInfo ( const char *  json_user_id_list,
TIMCommCallback  cb,
const void *  user_data 
)

5.3 订阅用户资料(7.4 及其以上版本支持,需要您购买旗舰版套餐)

参数
json_user_id_list待订阅的用户 ID 列表
cb订阅用户资料成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意:
  • 该接口用于订阅陌生人的资料变更事件,订阅成功后,当订阅用户资料发生变更,您可以通过监听 TIMSetUserInfoChangedCallback 回调来感知
  • 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
  • 自己的资料变更通知不需要订阅,默认会通过 TIMSetSelfInfoUpdatedCallback 回调通知给您
  • 好友的资料变更通知不需要订阅,默认会通过 TIMSetUpdateFriendProfileCallback 回调来通知给您

示例

json::Array json_user_id_list;
json_user_id_list.push_back("user1");
json_user_id_list.push_back("user2");
TIMSubscribeUserInfo(json::Serialize(json_user_id_list).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMSubscribeUserInfo code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);

◆ TIMUnsubscribeUserInfo()

TIM_API int TIMUnsubscribeUserInfo ( const char *  json_user_id_list,
TIMCommCallback  cb,
const void *  user_data 
)

5.4 取消订阅用户资料(7.4 及其以上版本支持,需要您购买旗舰版套餐)

参数
json_user_id_list待取消订阅的用户 ID 列表
cb订阅用户资料成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意:
  • 当 json_user_id_list 为空 或 nullptr 时,取消当前所有的订阅

示例

json::Array json_user_id_list;
json_user_id_list.push_back("user1");
json_user_id_list.push_back("user2");
TIMUnsubscribeUserInfo(json::Serialize(json_user_id_list).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMUnsubscribeUserInfo code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);

◆ TIMGetUserStatus()

TIM_API int TIMGetUserStatus ( const char *  json_identifier_array,
TIMCommCallback  cb,
const void *  user_data 
)

5.5 查询用户状态(6.3 及其以上版本支持,需要您购买旗舰版套餐)

参数
json_identifier_array用户 ID 列表
cb查询用户状态成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意:
  • 如果您想查询自己的自定义状态,您只需要传入自己的 userID 即可

示例

json::Array json_array;
json_array.push_back("user1");
json_array.push_back("user2");
TIMGetUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMGetUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);

◆ TIMSetSelfStatus()

TIM_API int TIMSetSelfStatus ( const char *  json_current_user_status,
TIMCommCallback  cb,
const void *  user_data 
)

5.6 设置自己的状态,从 6.3 版本开始支持

参数
json_current_user_status待设置的自定义状态,Json Key 请参考 TIMUserStatus
cb设置自己的状态成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意: 该接口只支持设置自己的自定义状态,即 kTIMUserStatusCustomStatus 字段,请参考 TIMUserStatus

示例

json::Object json_current_user_status;
json_current_user_status[kTIMUserStatusCustomStatus] = "custom status";
TIMSetSelfStatus(json::Serialize(json_current_user_status).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMSetSelfStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);

◆ TIMSubscribeUserStatus()

TIM_API int TIMSubscribeUserStatus ( const char *  json_identifier_array,
TIMCommCallback  cb,
const void *  user_data 
)

5.7 订阅用户状态(6.3 及其以上版本支持,需要您购买旗舰版套餐)

参数
json_identifier_array待订阅的用户 ID 列表
cb订阅用户状态成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意:
  • 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 TIMSetUserStatusChangedCallback 回调来感知
  • 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
  • 该接口不支持订阅自己,您可以通过监听 TIMSetUserStatusChangedCallback 回调来感知自身的自定义状态的变更
  • 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户

示例

json::Array json_array;
json_array.push_back("user1");
json_array.push_back("user2");
TIMSubscribeUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMSubscribeUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);

◆ TIMUnsubscribeUserStatus()

TIM_API int TIMUnsubscribeUserStatus ( const char *  json_identifier_array,
TIMCommCallback  cb,
const void *  user_data 
)

5.8 取消订阅用户状态,从 6.3 版本开始支持

参数
json_identifier_array待取消订阅的用户 ID 列表
cb订阅用户状态成功与否的回调。回调函数定义请参考 TIMCommCallback
user_data用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
返回
int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 TIMResult
注意
请注意:
  • 当 json_identifier_array 为空或 nullptr 时,取消当前所有的订阅

示例

json::Array json_array;
json_array.push_back("user1");
json_array.push_back("user2");
TIMUnsubscribeUserStatus(json::Serialize(json_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
Printf("TIMUnsubscribeUserStatus code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
}, nullptr);