功能描述
用户可以查询自己、好友、非好友的信息;可以修改自己的昵称、头像、签名等信息;可以修改好友的备注、分组等信息。
相关方法在核心类 V2TIMManager
、V2TIMFriendshipManager(Android)
/ V2TIMManager(Friendship)(iOS & Mac)
中。
关系链事件监听器
您可以调用 addFriendListener
(Android / iOS & Mac / Windows) 添加关系链事件监听器。
当不想再接收关系链事件时,可调用 removeFriendListener
(Android / iOS & Mac / Windows) 移除关系链事件监听器。
注意:
只有预先设置好关系链事件监听器,才能正常接收到下文中的各种事件通知。
示例代码如下:
V2TIMManager.getFriendshipManager().addFriendListener(listener);
V2TIMManager.getFriendshipManager().removeFriendListener(listener);
[[V2TIMManager sharedInstance] addFriendListener:self];
[[V2TIMManager sharedInstance] removeFriendListener:self];
class FriendshipListener final : public V2TIMFriendshipListener {
};
FriendshipListener friendshipListener;
V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);
V2TIMManager::GetInstance()->GetFriendshipManager()->RemoveFriendListener(&friendshipListener);
用户资料管理
查询和修改自己的资料
您可以调用 getUsersInfo
(Android / iOS & Mac / Windows) 接口查询个人资料,其中参数 userIDList
需填入自己的 UserID。
示例代码如下:
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) {
}
});
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&)>;
<span class="hljs-built_in">ValueCallback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">ValueCallback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">(<span class="hljs-keyword">const</span> T& value)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>(value);
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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() {
@Override
public void onSuccess() {
}
@Override
public void onError(int code, String desc) {
}
});
V2TIMManager.getInstance().addIMSDKListener(new V2TIMSDKListener() {
@Override
public 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];
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::<span class="hljs-built_in">move</span>(success_callback)
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback)
}
void OnSuccess() override {
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>();
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSelfInfoUpdated</span><span class="hljs-params">(<span class="hljs-keyword">const</span> V2TIMUserFullInfo& info)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-comment">// 收到个人资料变更回调</span>
}
<span class="hljs-comment">// 其他成员 ...</span>
};
SDKListener sdkListener;
V2TIMManager::GetInstance()->AddSDKListener(&sdkListener);
查询和修改好友资料
您可以调用 getFriendsInfo
(Android / iOS & Mac / Windows) 接口查询指定的好友资料。详情请参考 好友管理。
查询非好友用户资料
您可以调用 getUsersInfo
(Android / iOS & Mac / Windows) 接口查询非好友资料,其中参数 userIDList
填入非好友的 UserID 即可。
说明:
- 不能修改非好友的资料。
- 非好友资料更新时,由于没有好友关系,后台无法向 SDK 发送系统通知,因此无法实时更新。为了避免每次获取用户资料都向后台发起网络请求,节省网络资源,SDK 增加了缓存逻辑,对同一个用户主动向后台拉取资料的时间间隔为 10 分钟。
示例代码如下:
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 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&)>;
<span class="hljs-built_in">ValueCallback</span>() = <span class="hljs-keyword">default</span>;
~<span class="hljs-built_in">ValueCallback</span>() <span class="hljs-keyword">override</span> = <span class="hljs-keyword">default</span>;
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">SetCallback</span><span class="hljs-params">(SuccessCallback success_callback, ErrorCallback error_callback)</span> </span>{
success_callback_ = std::<span class="hljs-built_in">move</span>(success_callback);
error_callback_ = std::<span class="hljs-built_in">move</span>(error_callback);
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnSuccess</span><span class="hljs-params">(<span class="hljs-keyword">const</span> T& value)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (success_callback_) {
<span class="hljs-built_in">success_callback_</span>(value);
}
}
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnError</span><span class="hljs-params">(<span class="hljs-keyword">int</span> error_code, <span class="hljs-keyword">const</span> V2TIMString& error_message)</span> <span class="hljs-keyword">override</span> </span>{
<span class="hljs-keyword">if</span> (error_callback_) {
<span class="hljs-built_in">error_callback_</span>(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);
本页内容是否解决了您的问题?