功能描述
用户可以查询自己、好友、非好友的信息;可以修改自己的昵称、头像、签名等信息;可以修改好友的备注、分组等信息。
相关方法在核心类
V2TIMManager
、V2TIMFriendshipManager(Android)
/ V2TIMManager(Friendship)(iOS & Mac)
中。关系链事件监听器
注意
只有预先设置好关系链事件监听器,才能正常接收到下文中的各种事件通知。
示例代码如下:
// 添加关系链监听器V2TIMManager.getFriendshipManager().addFriendListener(listener);// 移除关系链监听器V2TIMManager.getFriendshipManager().removeFriendListener(listener);
// 添加关系链监听器// 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);
查询和修改用户资料
查询和修改自己的资料
示例代码如下:
// 获取个人资料String loginUser = V2TIMManager.getInstance().getLoginUser();List<String> userIDList = new ArrayList<>();userIDList.add(loginUser);V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {@Overridepublic void onSuccess(List<V2TIMUserFullInfo> profiles) {// 获取个人资料成功}@Overridepublic void onError(int code, String 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
(Android / iOS & Mac / Windows) 接口修改个人资料。
个人资料包括昵称、头像、签名、性别、出生日期、好友验证方式等,详情可参见 V2TIMUserFullInfo
(Android / iOS & Mac / Windows) 类定义。
资料修改成功后,您会收到 onSelfInfoUpdated
(Android / iOS & Mac / Windows) 回调。示例代码如下:
// 设置个人资料V2TIMUserFullInfo info = new V2TIMUserFullInfo();info.setNickname("nickName");info.setFaceUrl("faceUrl");V2TIMManager.getInstance().setSelfInfo(info, new V2TIMCallback() {@Overridepublic void onSuccess() {// 设置个人资料成功}?@Overridepublic void onError(int code, String desc) {// 设置个人资料失败}});?// 监听个人资料变更回调V2TIMManager.getInstance().addIMSDKListener(new V2TIMSDKListener() {@Overridepublic void onSelfInfoUpdated(V2TIMUserFullInfo info) {// 收到个人资料变更回调}});
// 设置个人资料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
(Android / iOS & Mac / Windows)接口查询指定的好友资料,调用 setFriendInfo
(Android / iOS & Mac / Windows)接口修改好友资料。详情请参见 好友管理。查询非好友用户资料
说明
不能修改非好友的资料。
非好友资料更新时,由于没有好友关系,后台无法向 SDK 发送系统通知,因此 SDK 无法实时更新非好友资料。为了避免每次获取用户资料都向后台发起网络请求,节省网络资源,SDK 增加了缓存逻辑,对同一个用户主动向后台拉取资料的时间间隔为 10 分钟。
示例代码如下:
List<String> userIDList = new ArrayList<>();userIDList.add("userA");V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {@Overridepublic void onSuccess(List<V2TIMUserFullInfo> profiles) {// 获取非好友资料成功}?@Overridepublic void onError(int code, String 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
(Android / iOS & Mac / Windows) 来订阅非好友用户的资料,订阅成功后,当被订阅的非好友用户资料发生变更时,IM SDK 会通过 onUserInfoChanged
(Android / iOS & Mac / Windows) 回调通知给您。通过订阅非好友用户资料,您可以实时感知某些非好友用户资料的变更。
说明:
该功能需要购买 旗舰版套餐包,并且在 即时通信 IM 控制台 开启用户资料变更订阅后才能使用。
?
?
?该功能仅增强版 7.4.4643 及以上版本支持。
订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最早订阅的用户(订阅好友也会占用这 200 个名额)。
该接口限频默认为 5 秒 20 次请求,且单次订阅最大用户数不超过 100 人。
注意:
好友的资料和自己的资料都不需要订阅,当好友或自己的资料变更时,默认会通过
onFriendInfoChanged
或onSelfInfoUpdated
回调来通知给您。示例代码如下:
List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");V2TIMManager.getInstance().subscribeUserInfo(useridList, new V2TIMCallback() {@Overridepublic void onSuccess() {// 订阅用户资料成功}?@Overridepublic void onError(int code, String 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);
取消订阅非好友用户资料
当传入的用户列表为空时,会取消当前所有的订阅。
说明:
该功能需要购买 旗舰版套餐包,并且在 即时通信 IM 控制台 开启用户资料变更订阅后才能使用。
?
?
?该功能仅增强版 7.4.4643 及以上版本支持。
该接口限频默认为 5 秒 20 次请求,且单次取消订阅最大用户数不超过 100 人。
示例代码如下所示:
List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");V2TIMManager.getInstance().unsubscribeUserInfo(useridList, new V2TIMCallback() {@Overridepublic void onSuccess() {// 取消订阅用户资料成功}?@Overridepublic void onError(int code, String 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);
用户资料变更通知
根据用户类型的不同,用户资料变更可以分为如下三种:
其中
onSelfInfoUpdated
和onUserInfoChanged
回调需要您调用addIMSDKListener
(Android / iOS & Mac / Windows)通过添加 SDK 监听器来设置,onFriendInfoChanged
回调需要您调用 addFriendListener
(Android / iOS & Mac / Windows)通过添加关系链监听器来设置。注意:
只有满足如下条件的用户,其资料变更才会通过
onUserInfoChanged
回调进行通知:使用
subscribeUserInfo
订阅成功的用户。非好友关系的用户。
示例代码如下:
V2TIMSDKListener v2TIMSDKListener = new V2TIMSDKListener() {@Overridepublic voidonSelfInfoUpdated
(V2TIMUserFullInfo info) {// 收到自己的资料变更通知}@Overridepublic voidonUserInfoChanged
(List<V2TIMUserFullInfo> infoList) {// 收到订阅用户 (非好友) 的资料变更通知}};?// 添加 SDK 监听器V2TIMManager.getInstance().addIMSDKListener(v2TIMSDKListener);??V2TIMFriendshipListener v2TIMFriendshipListener = new V2TIMFriendshipListener() {@Overridepublic void onFriendInfoChanged(List<V2TIMFriendInfo> infoList) {// 收到好友资料变更通知}};?// 添加关系链监听器V2TIMManager.getFriendshipManager().addFriendListener(v2TIMFriendshipListener);
// 添加 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);
?