Android&iOS&Windows&Mac

搜索云端用户

功能描述

您可以通过用户 ID、昵称、性别等信息来搜索云端用户,以便快速找到所需的用户资料。此功能适用于需要查找特定用户信息的场合,例如在熟人社交场景中查找用户以加好友,或者在陌生人社交场景中查找用户以关注。
说明:
用户云端搜索功能仅 8.4 及以上版本支持。
该功能为增值功能,详见价格说明
如果您没有开通该服务,调用接口会返回 60020 错误码。

搜索云端用户接口

调用接口 searchUsers (Java / Swift / Objective-C / C++) 可以搜索云端用户资料,该接口返回的是云端存储的用户资料,包括好友和非好友资料,您可以调用 checkFriend (Java / Swift / Objective-C / C++) 接口来判断是否为好友。
V2TIMUserSearchParam 的参数说明如下:
参数
含义
说明
keywordList
关键字列表
关键字列表最多支持 5 个,keyword 会自动匹配用户 ID、昵称。
keywordListMatchType
指定关键字列表匹配类型
可设置为 “或” 关系搜索,或 “与” 关系搜索。取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_ORV2TIM_KEYWORD_LIST_MATCH_TYPE_AND。默认为 “或” 关系搜索。
gender
用户性别
如果不设置,默认男性和女性都会返回。
minBirthday
用户最小生日
如果不设置,默认值为 0。
maxBirthday
用户最大生日
如果不设置,默认 birthday >= minBirthday 的用户都会返回。
searchCount
搜索的数量
必须大于 0,最大支持 100,默认 20。
searchCursor
搜索的游标
搜索的起始位置,第一次填写空字符串,续拉时填写上一次返回的 V2TIMUserSearchResult 中的 searchCursor

用户搜索结果类

消息搜索结果类为 V2TIMUserSearchResultJava / Swift / Objective-C / C++)。参数说明如下:
参数
含义
说明
isFinished
搜索是否已完成
是否已经返回全部满足搜索条件的用户列表。
totalCount
搜索结果总数
满足搜索条件的用户总数量。
nextCursor
续拉的游标
调用搜索接口续拉时需要填的游标。
userList
用户列表
当前一次云端搜索返回的用户列表。
示例代码如下:
Java
Swift
Objective-C
C++
V2TIMUserSearchParam searchParam = new V2TIMUserSearchParam();
searchParam.setKeywordList(keywordList);
searchParam.setKeywordListMatchType(param.V2TIM_KEYWORD_LIST_MATCH_TYPE_OR);
searchParam.setSearchCount(20);
searchParam.setSearchCursor("");

V2TIMManager.getInstance().searchUsers(searchParam, new V2TIMValueCallback<V2TIMUserSearchResult>() {
@Override
public void onSuccess(V2TIMUserSearchResult userSearchResult) {
// 搜索云端用户资料成功
}

@Override
public void onError(int code, String desc) {
// 搜索云端用户资料失败
}
});
let param = V2TIMUserSearchParam()
param.gender = .V2TIM_GENDER_UNKNOWN;
param.keywordList = ["keyword1", "keyword2"];
param.keywordListMatchType = .V2TIM_KEYWORD_LIST_MATCH_TYPE_OR;
param.searchCount = 20;
param.searchCursor = "";
V2TIMManager.shared.searchUsers(param: param) { searchResult in
// 搜索云端用户资料成功
} fail: { code, desc in
// 搜索云端用户资料失败
}
V2TIMUserSearchParam *param = [[V2TIMUserSearchParam alloc] init];
param.gender = V2TIM_GENDER_UNKNOWN;
param.keywordList = @[@"keyword1", @"keyword2"];
param.keywordListMatchType = V2TIM_KEYWORD_LIST_MATCH_TYPE_OR;
param.searchCount = 20;
param.searchCursor = @"";
[[V2TIMManager sharedInstance] searchUsers:param succ:^(V2TIMUserSearchResult *searchResult) {
// 搜索云端用户资料成功
} 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_;
};

V2TIMUserSearchParam searchParam;
searchParam.keywordList = keywordList;
param.keywordListMatchType = V2TIM_KEYWORD_LIST_MATCH_TYPE_OR;
param.searchCount = 20;
param.searchCursor = "";

auto callback = new ValueCallback<V2TIMUserSearchResult>{};
callback->SetCallback(
[=](const V2TIMUserSearchResult& userSearchResult) {
// 搜索云端用户资料成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 搜索云端用户资料失败
delete callback;
});

V2TIMManager::GetInstance()->SearchUsers(searchParam, callback);