好友管理
功能简介
ZIM SDK 支持好友管理,用户可以直接添加和删除好友、查看看好友列表、向用户发起好友申请、同意或拒绝好友申请、查看好友申请列表、检查其他用户与自己的好友关系、查询或修改好友信息。
每名用户最多可以拥有 3000 名好友。
基础功能
监听好友相关回调
通过调用 ZIMEventHandler 接口,注册监听好友相关回调,包括 onFriendListChanged 、onFriendApplicationListChanged 、 onFriendApplicationUpdated 和 onFriendInfoUpdated 。
// 好友列表变更回调
public void onFriendListChanged(ZIM zim, ArrayList<ZIMFriendInfo> friendInfoList,
ZIMFriendListChangeAction action) {}
// 好友信息变更回调
public void onFriendInfoUpdated(ZIM zim, ArrayList<ZIMFriendInfo> friendInfoList) {}
// 好友申请列表变更回调
public void
onFriendApplicationListChanged(ZIM zim,
ArrayList<ZIMFriendApplicationInfo> friendApplicationInfoList,
ZIMFriendApplicationListChangeAction action) {}
// 好友申请信息变更回调
public void
onFriendApplicationUpdated(ZIM zim,
ArrayList<ZIMFriendApplicationInfo> friendApplicationInfoList) {}
1
// 好友列表变更回调
static void Function(ZIM zim, List<ZIMFriendInfo> friendInfoList ,ZIMFriendListChangeAction action)? onFriendListChanged;
// 好友信息变更回调
static void Function(ZIM zim, List<ZIMFriendInfo> friendInfoList)? onFriendInfoUpdated;
// 好友申请列表变更回调
static void Function(ZIM zim,List<ZIMFriendApplicationInfo> friendApplicationInfoList ,ZIMFriendApplicationListChangeAction action)? onFriendApplicationListChanged;
// 好友申请信息变更回调
static void Function(ZIM zim,List<ZIMFriendApplicationInfo> friendApplicationInfoList)? onFriendApplicationUpdated;
1
// 好友列表变化的回调函数
- (void)zim:(ZIM *)zim
friendListChanged:(NSArray<ZIMFriendInfo * > *)friendInfoList
action:(ZIMFriendListChangeAction)action{
// 待办事项
}
// 好友信息更新的回调函数
- (void)zim:(ZIM *)zim friendInfoUpdated:(NSArray<ZIMFriendInfo * > *)friendInfoList{
// 待办事项
}
// 好友申请列表变化的回调函数
- (void)zim:(ZIM *)zim
friendApplicationListChanged:(NSArray<ZIMFriendApplicationInfo * > *)friendApplicationInfoList
action:(ZIMFriendApplicationListChangeAction)action{
// 待办事项
}
// 好友申请信息更新的回调函数
- (void)zim:(ZIM *)zim
friendApplicationUpdated:(NSArray<ZIMFriendApplicationInfo * > *)friendApplicationInfoList{
// 待办事项
}
1
// 好友列表变化的回调函数
- (void)zim:(ZIM *)zim
friendListChanged:(NSArray<ZIMFriendInfo * > *)friendInfoList
action:(ZIMFriendListChangeAction)action{
// 待办事项
}
// 好友信息更新的回调函数
- (void)zim:(ZIM *)zim friendInfoUpdated:(NSArray<ZIMFriendInfo * > *)friendInfoList{
// 待办事项
}
// 好友申请列表变化的回调函数
- (void)zim:(ZIM *)zim
friendApplicationListChanged:(NSArray<ZIMFriendApplicationInfo * > *)friendApplicationInfoList
action:(ZIMFriendApplicationListChangeAction)action{
// 待办事项
}
// 好友申请信息更新的回调函数
- (void)zim:(ZIM *)zim
friendApplicationUpdated:(NSArray<ZIMFriendApplicationInfo * > *)friendApplicationInfoList{
// 待办事项
}
1
// 好友列表变更回调
zim.on('friendListChanged', (zim, data) => {
// 待办事项
});
// 好友信息更新回调
zim.on('friendInfoUpdated', (zim, data) => {
// 待办事项
});
// 好友申请列表变更回调
zim.on('friendApplicationListChanged', (zim, data) => {
// 待办事项
});
// 好友申请更新回调
zim.on('friendApplicationUpdated', (zim, data) => {
// 待办事项
});
1
// 注册 SDK 事件通知回调
zim->setEventHandler(shared_from_this());
...
// 好友列表变更回调
void onFriendListChanged(ZIM * /*zim*/,
const std::vector<ZIMFriendInfo> & /*friendInfoList*/,
ZIMFriendListChangeAction & /*action*/) {
//todo
}
// 好友信息变更回调
void onFriendInfoUpdated(ZIM * /*zim*/,
const std::vector<ZIMFriendInfo> & /*friendInfoList*/) {
//todo
}
// 好友申请列表变更回调
void onFriendApplicationListChanged(
ZIM * /*zim*/, const std::vector<ZIMFriendApplicationInfo> & /*friendApplicationInfoList*/,
ZIMFriendApplicationListChangeAction & /*action*/) {
//todo
}
// 好友申请信息变更回调
void onFriendApplicationUpdated(
ZIM * /*zim*/,
const std::vector<ZIMFriendApplicationInfo> & /*friendApplicationInfoList*/) {
//todo
}
1
直接添加好友
登录 ZIM SDK 后,用户可以通过 addFriend 接口对其他用户设置好友备注和属性,直接添加为好友,无需对方同意。
最多可以设置 5 个好友属性,且对应的 key
取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。
添加好友结果通过 ZIMFriendAddedResult 返回。
// 直接添加好友
ZIMFriendAddConfig config = new ZIMFriendAddConfig();
config.friendAlias = "zego"
config.friendAttributes.put("k0", "v0");
config.wording = "老同学好久不见";
ZIM.getInstance().addFriend("zego", config, new ZIMFriendAddedCallback() {
@Override
public void onFriendAddedCallback(ZIMFriendInfo friendInfo, ZIMError zimError) {
}
);
1
// 直接添加好友
try{
ZIMFriendAddConfig config = ZIMFriendAddConfig();
config.friendAlias = 'zego';
config.friendAttributes['k0'] = 'v0';
config.wording = '老同学好久不见';
ZIMFriendAddedResult result = await ZIM.getInstance()!.addFriend("zego", config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 直接添加好友
ZIMFriendAddConfig *addConfig = [[ZIMFriendAddConfig alloc] init];
addConfig.wording = @"你好";
addConfig.friendAlias = @"马克";
addConfig.friendAttributes = @{@"k0":@"SZ"};
[[ZIM getInstance] addFriendByUserID:@"userID" config:addConfig callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 直接添加好友
ZIMFriendAddConfig *addConfig = [[ZIMFriendAddConfig alloc] init];
addConfig.wording = @"你好";
addConfig.friendAlias = @"马克";
addConfig.friendAttributes = @{@"k0":@"SZ"};
[[ZIM getInstance] addFriendByUserID:@"userID" config:addConfig callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 直接添加好友
zim.addFriend('userID', { wording: '你好!', friendAlias: '马克', friendAttributes: { k0: 'SZ' } }).then(res => {
const friendInfo = res.friendInfo;
});
1
// 直接添加好友
ZIMFriendAddConfig config;
config.wording = "Hello!";
config.friendAlias = "Mark";
config.friendAttributes["k0"] = "SZ";
zim::ZIM::getInstance()->addFriend("userID", config, (const zim::ZIMFriendInfo &friendInfo, const zim::ZIMError &errorInfo){
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
}
1
添加好友成功后,相关用户会收到回调 onFriendListChanged 得知该用户已成为好友。
批量删除好友
登录 ZIM SDK 后,用户可以通过 deleteFriends 接口批量单向或双向删除至多 20 名好友。
以用户 A、B 举例说明单向删除和双向删除:
- 单向删除:当用户 A 单向删除了用户 B,用户 B 不再是用户 A 的好友、用户 A 仍为用户 B 的好友。
- 双向删除:当用户 A 双向删除了用户 B,彼此都不再是对方的好友。
删除好友结果通过 ZIMFriendsDeletedCallback 返回。
// 批量删除好友
// type 为 BOTH:双向删除
// type 为 SINGLE:单向删除
ZIMFriendDeleteConfig zimFriendDeleteConfig = new ZIMFriendDeleteConfig();
zimFriendDeleteConfig.type = ZIMFriendDeleteType.BOTH;
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("zego");
ZIM.getInstance().deleteFriends(arrayList, zimFriendDeleteConfig, new ZIMFriendsDeletedCallback() {
@Override
public void onFriendsDeletedCallback(ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError zimError) {
// 删除结果回调。
}
});
1
// 批量删除好友
// type 为 both:双向删除
// type 为 single:单向删除
try{
ZIMFriendDeleteConfig friendDeleteConfig = ZIMFriendDeleteConfig();
friendDeleteConfig.type = ZIMFriendDeleteType.single;
List<String> list = [];
list.add('zego');
ZIMFriendsDeletedResult result = await ZIM.getInstance()!.deleteFriends(list, friendDeleteConfig);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 批量删除好友
// type为ZIMFriendDeleteTypeBoth:双向删除
// type为ZIMFriendDeleteTypeSingle:单向删除
ZIMFriendDeleteConfig *friendDeleteConfig = [[ZIMFriendDeleteConfig alloc] init];
friendDeleteConfig.type = ZIMFriendDeleteTypeBoth;
[[ZIM getInstance] deleteFriendsByUserIDs:@[@"userID1",@"userID2"] config:friendDeleteConfig callback:^(NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 批量删除好友
// type为ZIMFriendDeleteTypeBoth:双向删除
// type为ZIMFriendDeleteTypeSingle:单向删除
ZIMFriendDeleteConfig *friendDeleteConfig = [[ZIMFriendDeleteConfig alloc] init];
friendDeleteConfig.type = ZIMFriendDeleteTypeBoth;
[[ZIM getInstance] deleteFriendsByUserIDs:@[@"userID1",@"userID2"] config:friendDeleteConfig callback:^(NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 批量删除好友
// 类型 0: 双向删除
// 类型 1: 单向删除
zim.deleteFriends(['userID1', 'userID2'], { type: 0 }).then(res => {
const errorUserList = res.errorUserList;
})
1
// 批量删除好友
// type 为 ZIM_FRIEND_DELETE_TYPE_BOTH:双向删除
// type 为 ZIM_FRIEND_DELETE_TYPE_SINGLE:单向删除
zim::ZIMFriendDeleteConfig config;
config.type = ZIM_FRIEND_DELETE_TYPE_BOTH;
std::vector<std::string> userIDs;
userIDs.emplace_back("userID1");
zim::ZIM::getInstance()->deleteFriends(userIDs, config, [=](
const std::vector<zim::ZIMErrorUserInfo>& errorUserList, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
删除好友成功后,根据删除类型,相关用户会收到回调 onFriendListChanged 得知该用户不再是好友。
发送好友申请
登录 ZIM SDK 后,用户可以通过 sendFriendApplication 接口向其他用户发送好友申请、设置好友备注和好友属性。
最多可以设置 5 个好友属性,且对应的 key
取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。
发送好友申请结果通过 ZIMFriendApplicationSentResult 返回。
// 发送好友申请
ZIMFriendApplicationSendConfig config = new ZIMFriendApplicationSendConfig();
config.friendAlias = "zego"
config.wording = "老同学你好";
ZIM.getInstance().sendFriendApplication("zego", config, new ZIMFriendApplicationSentCallback() {
@Override
public void onFriendApplicationSentCallback( ZIMFriendApplicationInfo applicationInfoList, ZIMError errorInfo) {
// 处理好友申请结果
}
});
1
// 发送好友申请
try{
ZIMFriendApplicationSendConfig config = ZIMFriendApplicationSendConfig();
config.friendAlias = 'zego';
config.wording = '老同学你好';
ZIMFriendApplicationSentResult result = await ZIM.getInstance()!.sendFriendApplication('zego', config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 发送好友申请
ZIMFriendApplicationSendConfig *sendConfig = [[ZIMFriendApplicationSendConfig alloc] init];
sendConfig.wording = @"你好!";
sendConfig.friendAlias = @"马克";
sendConfig.friendAttributes = @{@"k0":@"SZ"};
[[ZIM getInstance] sendFriendApplicationToUserID:@"userID" config:sendConfig callback:^(ZIMFriendApplicationInfo * _Nonnull applicationInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 收到好友申请列表变更的回调
zim.on('friendApplicationListChanged', (zim, data) => {
// action为0表示新的申请
const { action, applicationList } = data;
});
1
// 发送好友申请
zim::ZIMFriendApplicationSendConfig config;
config.friendAlias = "Mark";
config.friendAttributes["k0"] = "SZ";
zim::ZIM::getInstance()->sendFriendApplication("userID", config, [=](const zim::ZIMFriendApplicationInfo& applicationInfo, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
目标用户会收到 onFriendApplicationListChanged 回调,得知有用户申请加为好友。该用户可以选择在 7 日内 同意 或 拒绝 申请。
如需调整好友申请有效期,请联系 ZEGO 技术支持。
// 收到好友申请列表回调
public void onFriendApplicationListChanged(ZIM zim,
ArrayList<ZIMFriendApplicationInfo> friendApplicationInfoList, ZIMFriendApplicationListChangeAction action) {
}
1
同意好友申请
登录 ZIM SDK 后,用户可以调用 acceptFriendApplication 接口,传入申请发起用户 ID,同意好友申请。
同意好友申请结果通过 ZIMFriendApplicationAcceptedResult 返回。
// 同意好友申请
ZIMFriendApplicationAcceptConfig config = new ZIMFriendApplicationAcceptConfig();
config.friendAlias = "zego";
config.friendAttributes = new
ZIM.getInstance().acceptFriendApplication("zego", config, new ZIMFriendApplicationAcceptedCallback() {
@Override
public void onFriendApplicationAccepted(ZIMFriendInfo friendInfo, ZIMError zimError) {
}
});
1
// 同意好友申请
try{
ZIMFriendApplicationAcceptConfig acceptConfig = ZIMFriendApplicationAcceptConfig();
acceptConfig.friendAlias = 'Mark';
acceptConfig.friendAttributes = {'k0':'SZ'};
ZIMFriendApplicationAcceptedResult result = await ZIM.getInstance()!.acceptFriendApplication('zego', config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码文档处理
onError.message; //错误信息
}
1
// 接受好友申请
ZIMFriendApplicationAcceptConfig *acceptConfig = [[ZIMFriendApplicationAcceptConfig alloc] init];
acceptConfig.friendAlias = @"Mark";
acceptConfig.friendAttributes = @{@"k0":@"SZ"};
[[ZIM getInstance] acceptFriendApplicationFromUserID:@"userID" config:acceptConfig callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 接受好友申请
zim.acceptFriendApplication('userID', { friendAlias: 'Mark', friendAttributes: { k0: 'SZ' } }).then(res => {
const friendInfo = res.friendInfo;
})
1
// 同意好友申请
zim::ZIMFriendApplicationAcceptConfig config;
config.friendAlias = "Mark";
config.friendAttributes["k0"] = "SZ";
zim::ZIM::getInstance()->acceptFriendApplication("userID", config, [=](const zim::ZIMFriendInfo& friendInfo, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
1
与申请相关的双方用户不仅会收到 onFriendApplicationUpdated 回调,得知申请通过,还会收到 onFriendListChanged 得知对方已成为自己的好友。
拒绝好友申请
登录 ZIM SDK 后,用户可以通过 rejectFriendApplication 拒绝好友申请。
拒绝好友申请结果通过 ZIMFriendApplicationRejectedResult 返回。
// 拒绝好友申请
ZIMFriendApplicationRejectConfig config = new ZIMFriendApplicationRejectConfig();
ZIM.getInstance().rejectFriendApplication("zego", config, new ZIMFriendApplicationRejectedCallback() {
@Override
public void onFriendApplicationRejected(ZIMUserInfo zimUserInfo, ZIMError zimError) {
// 拒绝好友申请结果
}
});
1
// 拒绝好友申请
try{
ZIMFriendApplicationRejectConfig config = ZIMFriendApplicationRejectConfig();
ZIMFriendApplicationRejectedResult result = await ZIM.getInstance()!.rejectFriendApplication('zego', config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 拒绝好友申请
ZIMFriendApplicationRejectConfig *rejectConfig = [[ZIMFriendApplicationRejectConfig alloc] init];
[[ZIM getInstance] rejectFriendApplicationFromUserID:@"userID" config:rejectConfig callback:^(ZIMUserInfo * _Nonnull userInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 拒绝好友申请
zim.rejectFriendApplication('userID', {}).then(res => {
const userInfo = res.userInfo;
})
1
// 拒绝好友申请
zim::ZIMFriendApplicationRejectConfig config;
zim::ZIM::getInstance()->rejectFriendApplication("userID", config, [=](const zim::ZIMUserInfo& userInfo, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
与申请相关的双方用户会收到 onFriendApplicationUpdated 回调,得知申请遭到拒绝。
查询好友列表
登录 ZIM SDK 后,用户可以通过 queryFriendList 拉取分页全量好友列表。
查询结果通过 ZIMFriendListQueriedResult 返回,返回的好友列表以好友关系创建时间倒序排列。
// 查询好友信息列表
ZIMFriendListQueryConfig config = new ZIMFriendListQueryConfig();
config.count = 3000;
config.nextFlag = 0;
ZIM.getInstance().queryFriendList(config, new ZIMFriendListQueriedCallback() {
@Override
public void onFriendListQueried(ArrayList<ZIMFriendInfo> friendList, int nextFlag, ZIMError errorInfo) {
}
});
1
// 查询好友信息列表
try{
ZIMFriendListQueryConfig config = ZIMFriendListQueryConfig();
config.count = 3000;
config.nextFlag = 0;
ZIMFriendListQueriedResult result = await ZIM.getInstance()!.queryFriendList(config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 查询好友信息列表
ZIMFriendListQueryConfig *queryConfig = [[ZIMFriendListQueryConfig alloc] init];
queryConfig.count = 100;
queryConfig.nextFlag = 0;
[[ZIM getInstance] queryFriendListWithConfig:queryConfig callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
}];
1
// 查询好友信息列表
ZIMFriendListQueryConfig *queryConfig = [[ZIMFriendListQueryConfig alloc] init];
queryConfig.count = 100;
queryConfig.nextFlag = 0;
[[ZIM getInstance] queryFriendListWithConfig:queryConfig callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
}];
1
// 查询好友信息列表
zim.queryFriendList({ count: 100, nextFlag: 0 }).then(res => {
const { friendList, nextFlag } = res;
});
1
// 查询好友信息列表
zim::ZIMFriendListQueryConfig config;
config.count = 100;
config.nextFlag = 0;
zim::ZIM::getInstance()->queryFriendList(config, [=](const std::vector<zim::ZIMFriendInfo>& friendList, unsigned int nextFlag,
const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
查询好友申请列表
登录 ZIM SDK 后,用户可以通过 queryFriendApplicationList 获取好友申请列表,了解各申请的状态。好友申请列表中会包含本用户向其他用户发起的申请,也会包含其他用户向本用户发起的申请。
查询结果通过 ZIMFriendApplicationListQueriedResult 返回。
// 查询好友申请信息列表
ZIMFriendApplicationListQueryConfig config = new ZIMFriendApplicationListQueryConfig();
config.count = 3000;
config.nextFlag = 0;
ZIM.getInstance().queryFriendApplicationList(config, new ZIMFriendApplicationListQueriedCallback() {
@Override
public void onFriendApplicationListQueried(ArrayList<ZIMFriendApplicationInfo> applicationList, int nextFlag, ZIMError errorInfo) {
}
});
1
// 查询好友申请信息列表
try{
ZIMFriendApplicationListQueryConfig config = ZIMFriendApplicationListQueryConfig();
config.count = 3000;
config.nextFlag = 0;
ZIMFriendApplicationListQueriedResult result = await ZIM.getInstance()!.queryFriendApplicationList(config);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 查询好友申请信息列表
ZIMFriendApplicationListQueryConfig *queryConfig = [[ZIMFriendApplicationListQueryConfig alloc] init];
queryConfig.count = 100;
queryConfig.nextFlag = 0;
[[ZIM getInstance] queryFriendApplicationListWithConfig:queryConfig callback:^(NSArray<ZIMFriendApplicationInfo * > * _Nonnull applicationList, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
}];
1
// 查询好友申请信息列表
zim.queryFriendApplicationList({ count: 100, nextFlag: 0 }).then(res => {
const { applicationList, nextFlag } = res;
});
1
// 查询好友申请信息列表
zim::ZIMFriendApplicationListQueryConfig config;
config.count = 100;
config.nextFlag = 0;
zim::ZIM::getInstance()->queryFriendApplicationList(config, [=](const std::vector<zim::ZIMFriendApplicationInfo>& applicationList,
unsigned int nextFlag, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
更多功能
更新好友备注
登录 ZIM SDK 后,用户可以通过 updateFriendAlias 更新自己对好友的备注。
更新结果通过 ZIMFriendAliasUpdatedResult 返回。
// 更新好友备注
ZIM.getInstance().updateFriendAlias("A同学", "zego", new ZIMFriendAliasUpdatedCallback() {
@Override
public void onFriendAliasUpdated(ZIMFriendInfo friendInfo, ZIMError zimError) {
}
});
1
// 更新好友备注
try{
ZIMFriendAliasUpdatedResult result = await ZIM.getInstance()!.updateFriendAlias('A同学', 'zego');
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 更新好友别名
[[ZIM getInstance] updateFriendAlias:@"新别名" userID:@"userID" callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 更新好友别名
[[ZIM getInstance] updateFriendAlias:@"新别名" userID:@"userID" callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 更新好友备注
zim.updateFriendAlias('新备注', 'userID' }).then(res => {
const friendInfo = res.friendInfo;
});
1
// 更新好友备注
zim::ZIM::getInstance()->updateFriendAlias("新备注", "userID", [=](const zim::ZIMFriendInfo& friendInfo, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
更新成功后,该用户可以收到 onFriendInfoUpdated 接口,得知好友信息已更新。
更新好友属性
登录 ZIM SDK 后,用户可以通过 updateFriendAttributes 更新好友属性。
最多可以设置 5 个好友属性,且对应的 key
取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。
更新好友属性结果通过 ZIMFriendAttributesUpdatedResult 返回。
HashMap<String, String> friendAttributes = new HashMap<String, String>();
friendAttributes.put("k0","v0");
// 更新好友属性
zim.updateFriendAttributes(friendAttributes, "zego", new ZIMFriendAttributesUpdatedCallback(){
public void onFriendAttributesUpdated(ZIMFriendInfo friendInfo, ZIMError errorInfo) {
}
});
1
// 更新好友属性
zim.updateFriendAttributes({ k1: 'v1', k2: 'v2' } , 'userID' }).then(res => {
const friendInfo = res.friendInfo;
});
1
// 更新好友属性
[[ZIM getInstance] updateFriendAttributes:@{@"k1":@"v1",@"k2":@"v2"} userID:@"userID" callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 更新好友属性
[[ZIM getInstance] updateFriendAttributes:@{@"k1":@"v1",@"k2":@"v2"} userID:@"userID" callback:^(ZIMFriendInfo * _Nonnull friendInfo, ZIMError * _Nonnull errorInfo) {
}];
1
// 更新好友属性
zim.updateFriendAttributes({ k1: 'v1', k2: 'v2' } , 'userID' }).then(res => {
const friendInfo = res.friendInfo;
});
1
// 更新好友属性
std::unordered_map<std::string, std::string> friendAttributes;
friendAttributes["k1"] = "v1";
friendAttributes["k2"] = "v2";
zim::ZIM::getInstance()->updateFriendAttributes(friendAttributes, "userID", [=](const zim::ZIMFriendInfo& friendInfo, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
更新成功后,该用户可以收到 onFriendInfoUpdated 接口,得知好友信息已更新。
检查好友关系
登录 ZIM SDK 后,用户可以通过 checkFriendsRelation 批量检查自己与至多 20 名其他用户的好友关系。
ZEGO 支持单边或双边检查好友关系,以检查用户 A 与目标用户 B 的好友关系为例:
- 单边检查:仅检查用户 A 的好友列表是否有用户 B。
- 双边检查:同时检查用户 A 和用户 B 的好友列表是否有对方。
检查好友关系结果通过 ZIMFriendsRelationCheckedResult 返回。
// 检查与其他用户的好友关系
// type 为 BOTH:双向
// type 为 SINGLE:单向
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("zego");
ZIMFriendRelationCheckConfig config = new ZIMFriendRelationCheckConfig();
config.type = ZIMFriendRelationCheckType.BOTH;
ZIM.getInstance().checkFriendsRelation(userIDs, config, new ZIMFriendsRelationCheckedCallback() {
@Override
public void onFriendsChecked(ArrayList<ZIMFriendRelationInfo> relationInfos, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
}
});
1
// 检查与其他用户的好友关系
// type 为 both:双向
// type 为 single:单向
try {
ZIMFriendAttributesUpdatedResult result = await ZIM.getInstance()!.updateFriendAttributes(
{'k1':'v1','k2':'v2'}, 'zego');
// 处理成功逻辑
} on PlatformException catch(onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 检查与其他用户的好友关系
// type为ZIMFriendRelationCheckTypeBoth:双向关系
// type为ZIMFriendRelationCheckTypeSingle:单向关系
ZIMFriendRelationCheckConfig *checkConfig = [[ZIMFriendRelationCheckConfig alloc] init];
checkConfig.type = ZIMFriendRelationCheckTypeSingle;
[[ZIM getInstance] checkFriendsRelationByUserIDs:@[@"userID1",@"userID2"] config:checkConfig callback:^(NSArray<ZIMFriendRelationInfo * > * _Nonnull relationInfos, NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 检查与其他用户的好友关系
// type为ZIMFriendRelationCheckTypeBoth:双向
// type为ZIMFriendRelationCheckTypeSingle:单向
ZIMFriendRelationCheckConfig *checkConfig = [[ZIMFriendRelationCheckConfig alloc] init];
checkConfig.type = ZIMFriendRelationCheckTypeSingle;
[[ZIM getInstance] checkFriendsRelationByUserIDs:@[@"userID1",@"userID2"] config:checkConfig callback:^(NSArray<ZIMFriendRelationInfo * > * _Nonnull relationInfos, NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 检查与其他用户的好友关系
// 类型为0:双向关系
// 类型为1:单向关系
zim.checkFriendsRelation(['userID1', 'userID2'], { type: 0 }).then(res => {
const { relationInfos, errorUserList } = res;
})
1
// 检查与其他用户的好友关系
// type 为 ZIM_FRIEND_RELATION_CHECK_TYPE_BOTH:双向
// type 为 ZIM_FRIEND_RELATION_CHECK_TYPE_SINGLE:单向
std::vector<std::string> userIDs;
userIDs.emplace_back("userID1");
zim::ZIMFriendRelationCheckConfig config;
config.type = ZIM_FRIEND_RELATION_CHECK_TYPE_BOTH;
zim::ZIM::getInstance()->checkFriendsRelation(userIDs, config, [=](
const std::vector<zim::ZIMFriendRelationInfo>& relationInfos,
const std::vector<zim::ZIMErrorUserInfo>& errorUserList, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
批量查询好友信息
登录 ZIM SDK 后,用户可以通过 queryFriendsInfo 批量查询 20 名好友信息。
批量查询好友信息结果通过 ZIMFriendsInfoQueriedResult 返回。
// 批量查询好友信息
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("zego");
ZIM.getInstance().queryFriendsInfo(userIDs, new ZIMFriendsInfoQueriedCallback() {
@Override
public void onFriendsInfoQueried(ArrayList<ZIMFriendInfo> friendInfos, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
}
});
1
// 批量查询好友信息
try{
List<String> userIDs = ['zego'];
userIDs.add('zego');
ZIMFriendsInfoQueriedResult result = await ZIM.getInstance()!.queryFriendsInfo(userIDs);
//处理成功逻辑
} on PlatformException catch (onError){
//处理失败逻辑
onError.code; //根据官网错误码表处理
onError.message; //错误信息
}
1
// 批量查询好友信息
[[ZIM getInstance] queryFriendsInfoByUserIDs:@[@"userID1",@"userID2"] callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendInfos, NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 批量查询好友信息
[[ZIM getInstance] queryFriendsInfoByUserIDs:@[@"userID1",@"userID2"] callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendInfos, NSArray<ZIMErrorUserInfo * > * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
}];
1
// 批量查询好友信息
zim.queryFriendsInfo(['userID1', 'userID2']).then(res => {
const { friendInfos, errorUserList } = res;
});
1
// 批量查询好友信息
std::vector<std::string> userIDs;
userIDs.emplace_back("userID1");
zim::ZIM::getInstance()->queryFriendsInfo(userIDs, [=](
const std::vector<zim::ZIMFriendInfo>& friendInfos,
const std::vector<zim::ZIMErrorUserInfo>& errorUserList, const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1
搜索好友
登录 ZIM SDK 后,用户可以通过 searchLocalFriends 接口,传入至多 5 个关键词,即可对好友的用户名及备注进行搜索,获取同时命中所有关键词的好友。
搜索结果通过 ZIMFriendsSearchedResult 返回。
ZIMFriendSearchConfig config = new ZIMFriendSearchConfig();
config.count = 100;
config.nextFlag = 0;
config.isAlsoMatchFriendAlias = true;
config.keywords.add("zego");
ZIM.getInstance().searchLocalFriends(config, new ZIMFriendsSearchedCallback() {
@Override
public void onFriendsSearched(ArrayList<ZIMFriendInfo> friendInfos, int nextFlag, ZIMError errorInfo)
{
}
});
1
try {
ZIMFriendSearchConfig config = ZIMFriendSearchConfig();
config.count = 100;
config.nextFlag = 0;
config.isAlsoMatchFriendAlias = true;
config.keywords.add('zego');
ZIMFriendsSearchedResult result = await ZIM.getInstance()!.searchLocalFriends(config);
// 处理成功逻辑
} on PlatformException catch (onError) {
// 处理失败逻辑
onError.code; // 根据官方错误代码表进行处理
onError.message; // 错误消息
}
1
ZIMFriendSearchConfig *searchConfig = [[ZIMFriendSearchConfig alloc] init];
searchConfig.count = 100;
searchConfig.keywords = @[@"a",@"b"];
searchConfig.isAlsoMatchFriendAlias = YES;
searchConfig.nextFlag = 0;
[[ZIM getInstance] searchLocalFriendsWithConfig:searchConfig callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendInfos, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
}];
1
ZIMFriendSearchConfig *searchConfig = [[ZIMFriendSearchConfig alloc] init];
searchConfig.count = 100;
searchConfig.keywords = @[@"a",@"b"];
searchConfig.isAlsoMatchFriendAlias = YES;
searchConfig.nextFlag = 0;
[[ZIM getInstance] searchLocalFriendsWithConfig:searchConfig callback:^(NSArray<ZIMFriendInfo * > * _Nonnull friendInfos, unsigned int nextFlag, ZIMError * _Nonnull errorInfo) {
}];
1
zim.searchLocalFriends({ keywords: ['a', 'b'], isAlsoMatchFriendAlias: true, count: 100, nextFlag: 0 }).then(res => {
// 待办事项
});
1
ZIMFriendSearchConfig config;
config.count = 100;
config.isAlsoMatchFriendAlias = true;
config.nextFlag = 0;
config.keywords.emplace_back("a");
config.keywords.emplace_back("b");
zim::ZIM::getInstance()->searchLocalFriends(config, [=](const std::vector<zim::ZIMFriendInfo>& friendInfos, unsigned int nextFlag,
const zim::ZIMError& errorInfo) {
if(errorInfo.code == ZIMErrorCodeSuccess) {
// ......
} else {
// ......
}
});
1