tencent cloud

即时通信 IM

动态与公告
产品动态
公告
产品简介
产品概述
基本概念
应用场景
功能介绍
账号系统
用户资料与关系链
消息管理
群组相关
公众号系统
音视频通话 Call
使用限制
购买指南
计费概述
价格说明
购买指引
续费指引
停服说明
退费说明
开发指引
Demo 专区
开通服务
体验 Demo
快速跑通
下载中心
SDK & Demo 源码
更新日志
聊天互动(含 UI)
TUIKit 组件介绍
快速开始
全功能接入
单功能接入
AI 集成
构建基础界面
更多特性
定义外观
国际化界面语言
推送服务(Push)
服务概述
名词解释
开通服务
快速跑通
厂商通道
数据统计
排查工具
客户端 API
服务端 API
推送回调
高级功能
更新日志
错误码
常见问题
智能客服
功能概述
快速入门
集成指引
管理员操作手册
客服操作手册
更多实践
直播间搭建
AI 聊天机器人方案
超大娱乐协作社群
Discord 实现指南
游戏内集成 Chat 指南
类 WhatsApp Channel 搭建方案
发送红包
Chat 应对防火墙限制相关
无 UI 集成
快速开始
集成 SDK
初始化
登录登出
消息相关
会话相关
群组相关
社群话题
用户管理
离线推送
云端搜索
本地搜索
公众号
客户端 API
JavaScript
Android
iOS & macOS
Swift
Flutter
Electron
Unity
React Native
C 接口
C++
服务端 API
生成 UserSig
REST API
第三方回调
控制台指南
新版控制台介绍
创建并升级应用
基本配置
功能配置
账号管理
群组管理
公众号管理
回调配置
用量统计
资源包查看指南
实时监控
开发辅助工具
访问管理
高级功能
常见问题
uni-app 常见问题
购买相关问题
SDK 相关问题
账号鉴权相关问题
用户资料与关系链相关问题
消息相关问题
群组相关问题
直播群相关问题
昵称头像相关问题
协议与认证
服务等级协议
安全合规认证
IM 政策
隐私政策
数据隐私和安全协议
平滑迁移方案
平滑迁移完整版
平滑迁移简化版
错误码
联系我们

Android&iOS&Windows&Mac

PDF
聚焦模式
字号
最后更新时间: 2025-03-20 21:22:07

功能描述

用户可以查询自己、好友、非好友的信息;可以修改自己的昵称、头像、签名等信息;可以修改好友的备注、分组等信息。

关系链事件监听器

您可以调用 addFriendListener (Java / Swift / Objective-C / C++) 添加关系链事件监听器。
当不想再接收关系链事件时,可调用 removeFriendListener (Java / Swift / Objective-C / C++) 移除关系链事件监听器。
注意
只有预先设置好关系链事件监听器,才能正常接收到下文中的各种事件通知。
示例代码如下:
Java
Swift
Objective-C
C++
// 添加关系链监听器
V2TIMManager.getFriendshipManager().addFriendListener(listener);
// 移除关系链监听器
V2TIMManager.getFriendshipManager().removeFriendListener(listener);
// 添加关系链监听器
V2TIMManager.shared.addFriendListener(listener: self)
// 移除关系链监听器
V2TIMManager.shared.removeFriendListener(listener: self)
// 添加关系链监听器
// self 为 id<V2TIMFriendshipListener>
[[V2TIMManager sharedInstance] addFriendListener:self];

// 移除关系链监听器
[[V2TIMManager sharedInstance] removeFriendListener:self];
class FriendshipListener final : public V2TIMFriendshipListener {
// 成员 ...
};

// 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调
FriendshipListener friendshipListener;
V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);

// 移除关系链监听器
V2TIMManager::GetInstance()->GetFriendshipManager()->RemoveFriendListener(&friendshipListener);


查询和修改用户资料

查询和修改自己的资料

您可以调用 getUsersInfo (Java / Swift / Objective-C / C++) 接口查询个人资料,其中参数 userIDList 需填入自己的 UserID。
示例代码如下:
Java
Swift
Objective-C
C++
// 获取个人资料
String loginUser = V2TIMManager.getInstance().getLoginUser();
List<String> userIDList = new ArrayList<>();
userIDList.add(loginUser);
V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
@Override
public void onSuccess(List<V2TIMUserFullInfo> profiles) {
// 获取个人资料成功
}
@Override
public void onError(int code, String desc) {
// 获取个人资料失败
}
});
if let userID = V2TIMManager.shared.getLoginUser() {
V2TIMManager.shared.getUsersInfo(userIDList: [userID]) { infoList in
infoList.forEach { item in
print( item.description)
}
} fail: { code, desc in
print( "getUsersInfo group fail, \\(code), \\(desc)")
}
}
// 获取个人资料
NSString *loginUser = [[V2TIMManager sharedInstance] getLoginUser];
[[V2TIMManager sharedInstance] getUsersInfo:@[loginUser] succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
// 获取个人资料成功
} fail:^(int code, NSString *desc) {
// 获取个人资料失败
}];
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

ValueCallback() = default;
~ValueCallback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMString loginUser = V2TIMManager::GetInstance()->GetLoginUser();
V2TIMStringVector userIDList;
userIDList.PushBack(loginUser);

auto callback = new ValueCallback<V2TIMUserFullInfoVector>{};
callback->SetCallback(
[=](const V2TIMUserFullInfoVector& userFullInfoList) {
// 获取个人资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 获取个人资料失败
delete callback;
});

V2TIMManager::GetInstance()->GetUsersInfo(userIDList, callback);

您可以调用 setSelfInfo (Java / Swift / Objective-C / C++) 接口修改个人资料。 个人资料包括昵称、头像、签名、性别、出生日期、好友验证方式等,详情可参考 V2TIMUserFullInfo(Java / Swift / Objective-C / C++) 类定义。 资料修改成功后,您会收到 onSelfInfoUpdated (Java / Swift / Objective-C / C++) 回调。
示例代码如下:
Java
Swift
Objective-C
C++
// 设置个人资料
V2TIMUserFullInfo info = new V2TIMUserFullInfo();
info.setNickname("nickName");
info.setFaceUrl("faceUrl");
V2TIMManager.getInstance().setSelfInfo(info, new V2TIMCallback() {
@Override
public void onSuccess() {
// 设置个人资料成功
}

@Override
public void onError(int code, String desc) {
// 设置个人资料失败
}
});

// 监听个人资料变更回调
V2TIMManager.getInstance().addIMSDKListener(new V2TIMSDKListener() {
@Override
public void onSelfInfoUpdated(V2TIMUserFullInfo info) {
// 收到个人资料变更回调
}
});
let info = V2TIMUserFullInfo()
info.selfSignature = "this is self signature by swift"
info.gender = .V2TIM_GENDER_FEMALE
info.role = 200
info.level = 222
info.birthday = UInt(Date().timeIntervalSince1970)
info.allowType = .V2TIM_FRIEND_ALLOW_ANY
info.nickName = "nickName"
info.faceURL = "URL"
info.customInfo = ["Str": "value1".data(using: .utf8) ?? Data()]
V2TIMManager.shared.setSelfInfo(info: info) {
print( "setSelfInfo succ, \\(info.description)")
} fail: { code, desc in
print( "setSelfInfo fail, \\(code), \\(desc)")
}
// 设置个人资料
V2TIMUserFullInfo *info = [[V2TIMUserFullInfo alloc] init];
info.nickName = @"nickName";
info.faceURL = @"faceURL";
[[V2TIMManager sharedInstance] setSelfInfo:info succ:^{
// 设置个人资料成功
} fail:^(int code, NSString *desc) {
// 设置个人资料失败
}];

// 监听个人资料变更回调
[[V2TIMManager sharedInstance] addIMSDKListener:self];
- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info {
// 收到个人资料变更回调
}
class Callback final : public V2TIMCallback {
public:
using SuccessCallback = std::function<void()>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

Callback() = default;
~Callback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess() override {
if (success_callback_) {
success_callback_();
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMUserFullInfo info;
info.nickName = u8"nickName";
info.faceURL = u8"faceUrl";
info.modifyFlag = V2TIMUserInfoModifyFlag::V2TIM_USER_INFO_MODIFY_FLAG_NICK |
V2TIMUserInfoModifyFlag::V2TIM_USER_INFO_MODIFY_FLAG_FACE_URL;

auto callback = new Callback{};
callback->SetCallback(
[=]() {
// 设置个人资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 设置个人资料失败
delete callback;
});

V2TIMManager::GetInstance()->SetSelfInfo(info, callback);

// 监听个人资料变更回调
class SDKListener final : public V2TIMSDKListener {
public:
SDKListener() = default;
~SDKListener() override = default;

void OnSelfInfoUpdated(const V2TIMUserFullInfo& info) override {
// 收到个人资料变更回调
}
// 其他成员 ...
};
// 添加事件监听器,注意在移除监听器之前需要保持 sdkListener 的生命期,以免接收不到事件回调
SDKListener sdkListener;
V2TIMManager::GetInstance()->AddSDKListener(&sdkListener);

查询和修改好友资料

您可以调用 getFriendsInfo (Java / Swift / Objective-C / C++) 接口查询指定的好友资料,调用 setFriendInfo(Java / Swift / Objective-C / C++) 接口修改好友资料。详情请参考 好友管理

查询非好友用户资料

您可以调用 getUsersInfo (Java / Swift / Objective-C / C++) 接口查询非好友资料,其中参数 userIDList 填入非好友的 UserID 即可。
说明
1. 不能修改非好友的资料。
2. 非好友资料更新时,由于没有好友关系,后台无法向 SDK 发送系统通知,因此 SDK 无法实时更新非好友资料。为了避免每次获取用户资料都向后台发起网络请求,节省网络资源,SDK 增加了缓存逻辑,对同一个用户主动向后台拉取资料的时间间隔为 10 分钟。
示例代码如下:
Java
Swift
Objective-C
C++
List<String> userIDList = new ArrayList<>();
userIDList.add("userA");
V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
@Override
public void onSuccess(List<V2TIMUserFullInfo> profiles) {
// 获取非好友资料成功
}

@Override
public void onError(int code, String desc) {
// 获取非好友资料失败
}
});
// 获取非好友资料
V2TIMManager.shared.getUsersInfo(userIDList: ["userID1"]) { infoList in
infoList.forEach { item in
print( item.description)
}
} fail: { code, desc in
print( "getUsersInfo group fail, \\(code), \\(desc)")
}
// 获取非好友资料
[[V2TIMManager sharedInstance] getUsersInfo:@[@"userA"] succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
// 获取非好友资料成功
} fail:^(int code, NSString *desc) {
// 获取非好友资料失败
}];
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

ValueCallback() = default;
~ValueCallback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMStringVector userIDList;
userIDList.PushBack(u8"userA");

auto callback = new ValueCallback<V2TIMUserFullInfoVector>{};
callback->SetCallback(
[=](const V2TIMUserFullInfoVector& userFullInfoList) {
// 获取非好友资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 获取非好友资料失败
delete callback;
});

V2TIMManager::GetInstance()->GetUsersInfo(userIDList, callback);

订阅非好友用户资料

您可以调用接口subscribeUserInfo (Java / Swift / Objective-C / C++) 来订阅非好友用户的资料,订阅成功后,当被订阅的非好友用户资料发生变更时,IM SDK 会通过 onUserInfoChanged (Java / Swift / Objective-C / C++) 回调通知给您。
通过订阅非好友用户资料,您可以实时感知某些非好友用户资料的变更。好友的资料和自己的资料都不需要订阅,当好友或自己的资料变更时,默认会通过onFriendInfoChanged onSelfInfoUpdated 回调来通知给您。
说明:
该功能仅对专业版、专业版Plus或企业版客户开放,购买专业版、专业版Plus或企业版并且在控制台开启“User Profile Change Subscription”后可以使用,开关路径:Applications > Your App > Chat > Configuration > Login and Message > User Profile Change Subscription。
该功能仅增强版 SDK 7.4 及以上版本支持。
订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最早订阅的用户(订阅好友也会占用这 200 个名额)。
该接口限频默认为 5 秒 20 次请求,且单次订阅最大用户数不超过 100 人。
示例代码如下:
Java
Swift
Objective-C
C++
List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");
V2TIMManager.getInstance().subscribeUserInfo(useridList, new V2TIMCallback() {
@Override
public void onSuccess() {
// 订阅用户资料成功
}

@Override
public void onError(int code, String desc) {
// 订阅用户资料失败
}
});
V2TIMManager.shared.subscribeUserInfo(userIDList: ["useridA", "useridB"]) {
print( "subscribeUserInfo succ")
} fail: { code, desc in
print( "subscribeUserInfo fail, \\(code), \\(desc)")
}
[V2TIMManager.sharedInstance subscribeUserInfo:@[@"useridA", @"useridB", @"useridC"]
succ:^ {
// 订阅用户资料成功
} fail:^(int code, NSString *desc) {
// 订阅用户资料失败
}];
class Callback final : public V2TIMCallback {
public:
using SuccessCallback = std::function<void()>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

Callback() = default;
~Callback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess() override {
if (success_callback_) {
success_callback_();
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMStringVector userIDList;
userIDList.PushBack(u8"useridA");
userIDList.PushBack(u8"useridB");

auto callback = new Callback{};
callback->SetCallback(
[=]() {
// 订阅用户资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 订阅用户资料成功
delete callback;
});

V2TIMManager::GetInstance()->SubscribeUserInfo(userIDList, callback);

取消订阅非好友用户资料

如果您不想接收订阅用户资料变更通知,可以调用接口unsubscribeUserInfo (Java / Swift / Objective-C / C++) 来取消某些已订阅用户。
当传入的用户列表为空时,会取消当前所有的订阅。
说明:
该功能仅对专业版、专业版Plus或企业版客户开放,购买专业版、专业版Plus或企业版并且在控制台开启“User Profile Change Subscription”后可以使用,开关路径:Applications > Your App > Chat > Configuration > Login and Message > User Profile Change Subscription。
该功能仅增强版 SDK 7.4 及以上版本支持。
该接口限频默认为 5 秒 20 次请求,且单次取消订阅最大用户数不超过 100 人。
示例代码如下所示:
Java
Swift
Objective-C
C++
List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");
V2TIMManager.getInstance().unsubscribeUserInfo(useridList, new V2TIMCallback() {
@Override
public void onSuccess() {
// 取消订阅用户资料成功
}

@Override
public void onError(int code, String desc) {
// 取消订阅用户资料失败
}
});
V2TIMManager.shared.unsubscribeUserInfo(userIDList: []) {
print( "unsubscribeUserInfo succ")
} fail: { code, desc in
print( "unsubscribeUserInfo fail, \\(code), \\(desc)")
}
[V2TIMManager.sharedInstance unsubscribeUserInfo:@[@"useridA", @"useridB", @"useridC"]
succ:^ {
// 取消订阅用户资料成功
} fail:^(int code, NSString *desc) {
// 取消订阅用户资料失败
}];
class Callback final : public V2TIMCallback {
public:
using SuccessCallback = std::function<void()>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

Callback() = default;
~Callback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess() override {
if (success_callback_) {
success_callback_();
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMStringVector userIDList;
userIDList.PushBack(u8"useridA");
userIDList.PushBack(u8"useridB");

auto callback = new Callback{};
callback->SetCallback(
[=]() {
// 取消订阅用户资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 取消订阅用户资料失败
delete callback;
});

V2TIMManager::GetInstance()->UnsubscribeUserInfo(userIDList, callback);


用户资料变更通知

根据用户类型的不同,用户资料变更可以分为如下三种:
1. 自己的资料变更,通过 onSelfInfoUpdated (Java / Swift / Objective-C / C++) 回调通知。
2. 好友的资料变更,通过 onFriendInfoChanged (Java / Swift / Objective-C / C++) 回调通知。
3. 订阅用户(非好友)的资料变更,通过 onUserInfoChanged (Java / Swift / Objective-C / C++) 回调通知。
其中 onSelfInfoUpdatedonUserInfoChanged 回调需要您调用addIMSDKListener (Java / Swift / Objective-C / C++) 通过添加 SDK 监听器来设置,onFriendInfoChanged回调需要您调用 addFriendListener (Java / Swift / Objective-C / C++) 通过添加关系链监听器来设置。
注意:
只有满足如下条件的用户,其资料变更才会通过 onUserInfoChanged 回调进行通知:
1. 使用 subscribeUserInfo 订阅成功的用户
2. 非好友关系的用户
示例代码如下:
Java
Swift
Objective-C
C++
V2TIMSDKListener v2TIMSDKListener = new V2TIMSDKListener() {
@Override
public void onSelfInfoUpdated(V2TIMUserFullInfo info) {
// 收到自己的资料变更通知
}
@Override
public void onUserInfoChanged(List<V2TIMUserFullInfo> infoList) {
// 收到订阅用户 (非好友) 的资料变更通知
}
};

// 添加 SDK 监听器
V2TIMManager.getInstance().addIMSDKListener(v2TIMSDKListener);


V2TIMFriendshipListener v2TIMFriendshipListener = new V2TIMFriendshipListener() {
@Override
public void onFriendInfoChanged(List<V2TIMFriendInfo> infoList) {
// 收到好友资料变更通知
}
};

// 添加关系链监听器
V2TIMManager.getFriendshipManager().addFriendListener(v2TIMFriendshipListener);
// 添加 SDK 监听器
V2TIMManager.shared.addIMSDKListener(listener: self)

func onSelfInfoUpdated(info: V2TIMUserFullInfo) {
}
func onUserInfoChanged(userInfoList: Array<V2TIMUserFullInfo>) {
userInfoList.forEach { item in
print( item.description)
}
}

// 添加关系链监听器
V2TIMManager.shared.addFriendListener(listener: self)
func onFriendProfileChanged(infoList: Array<V2TIMFriendInfo>) {
print( infoList)
}
// 添加 SDK 监听器
[[V2TIMManager sharedInstance] addIMSDKListener:self];

- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)info {
// 收到自己的资料变更回调
}

- (void)onUserInfoChanged:(NSArray<V2TIMUserFullInfo *> *)infoList {
// 收到订阅用户 (非好友) 的资料变更通知
}


// 添加关系链监听器
[[V2TIMManager sharedInstance] addFriendListener:self];

- (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList {
// 收到好友资料变更通知
}
class SDKListener final : public V2TIMSDKListener {
public:
SDKListener() = default;
~SDKListener() override = default;

void OnSelfInfoUpdated(const V2TIMUserFullInfo& Info) override {
// 收到自己的资料变更回调
}
void OnUserInfoChanged(const V2TIMUserFullInfoVector& InfoList) override {
// 收到订阅用户 (非好友) 的资料变更通知
}
// 其他成员函数 ...
};

// 添加 SDK 事件监听器,注意在移除监听器之前需要保持 sdkListener 的生命期,以免接收不到事件回调
SDKListener sdkListener;
V2TIMManager::GetInstance()->AddSDKListener(&sdkListener);


class FriendshipListener final : public V2TIMFriendshipListener {
public:
FriendshipListener() = default;
~FriendshipListener() override = default;

void OnFriendInfoChanged(const V2TIMFriendInfoVector& InfoList) override {
// 收到好友资料变更通知
}
// 其他成员函数 ...
};

// 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调
FriendshipListener friendshipListener;
V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈