logo
当前页

好友管理


功能简介

ZIM SDK 支持好友管理,用户可以直接添加和删除好友、查看看好友列表、向用户发起好友申请、同意或拒绝好友申请、查看好友申请列表、检查其他用户与自己的好友关系、查询或修改好友信息。

每名用户最多可以拥有 3000 名好友。

基础功能

监听好友相关回调

通过调用 setEventHandler 接口,注册监听好友相关回调,包括 onFriendListChangedonFriendApplicationListChangedonFriendApplicationUpdatedonFriendInfoUpdated

Untitled
// 注册 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
Copied!

直接添加好友

登录 ZIM SDK 后,用户可以通过 addFriend 接口对其他用户设置好友备注和属性,直接添加为好友,无需对方同意。

说明

最多可以设置 5 个好友属性,且对应的 key 取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。

添加好友结果通过 ZIMFriendAddedCallback 返回。

Untitled
// 直接添加好友
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
Copied!

添加好友成功后,相关用户会收到回调 onFriendListChanged 得知该用户已成为好友。

批量删除好友

登录 ZIM SDK 后,用户可以通过 deleteFriends 接口批量单向或双向删除至多 20 名好友。

以用户 A、B 举例说明单向删除和双向删除:

  • 单向删除:当用户 A 单向删除了用户 B,用户 B 不再是用户 A 的好友、用户 A 仍为用户 B 的好友。
  • 双向删除:当用户 A 双向删除了用户 B,彼此都不再是对方的好友。

删除好友结果通过 ZIMFriendsDeletedCallback 返回。

Untitled
// 批量删除好友
// 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
Copied!

删除好友成功后,根据删除类型,相关用户会收到回调 onFriendListChanged 得知该用户不再是好友。

发送好友申请

登录 ZIM SDK 后,用户可以通过 sendFriendApplication 接口向其他用户发送好友申请、设置好友备注和好友属性。

说明

最多可以设置 5 个好友属性,且对应的 key 取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。

发送好友申请结果通过 ZIMFriendApplicationSentCallback 返回。

Untitled
// 发送好友申请
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
Copied!

目标用户会收到 onFriendApplicationListChanged 回调,得知有用户申请加为好友。该用户可以选择在 7 日内 同意拒绝 申请。

说明

如需调整好友申请有效期,请联系 ZEGO 技术支持。

同意好友申请

登录 ZIM SDK 后,用户可以调用 acceptFriendApplication 接口,传入申请发起用户 ID,同意好友申请。

同意好友申请结果通过 ZIMFriendApplicationAcceptedCallback 返回。

Untitled
// 同意好友申请
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
Copied!

与申请相关的双方用户不仅会收到 onFriendApplicationUpdated 回调,得知申请通过,还会收到 onFriendListChanged 得知对方已成为自己的好友。

拒绝好友申请

登录 ZIM SDK 后,用户可以通过 rejectFriendApplication 拒绝好友申请。

拒绝好友申请结果通过 ZIMFriendApplicationRejectedCallback 返回。

Untitled
// 拒绝好友申请
zim::ZIMFriendApplicationRejectConfig config;
zim::ZIM::getInstance()->rejectFriendApplication("userID", config, [=](const zim::ZIMUserInfo& userInfo, const zim::ZIMError& errorInfo) {
    if(errorInfo.code == ZIMErrorCodeSuccess) {
        // ......
    } else {
        // ......
    }  
    });
1
Copied!

与申请相关的双方用户会收到 onFriendApplicationUpdated 回调,得知申请遭到拒绝。

查询好友列表

登录 ZIM SDK 后,用户可以通过 queryFriendList 拉取分页全量好友列表。

查询结果通过 ZIMFriendListQueriedCallback 返回,返回的好友列表以好友关系创建时间倒序排列。

Untitled
// 查询好友信息列表
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
Copied!

查询好友申请列表

登录 ZIM SDK 后,用户可以通过 queryFriendApplicationList 获取好友申请列表,了解各申请的状态。好友申请列表中会包含本用户向其他用户发起的申请,也会包含其他用户向本用户发起的申请。

查询结果通过 ZIMFriendApplicationListQueriedCallback 返回。

Untitled
// 查询好友申请信息列表
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
Copied!

更多功能

更新好友备注

登录 ZIM SDK 后,用户可以通过 updateFriendAlias 更新自己对好友的备注。

更新结果通过 ZIMFriendAliasUpdatedCallback 返回。

Untitled
// 更新好友备注
zim::ZIM::getInstance()->updateFriendAlias("新备注", "userID", [=](const zim::ZIMFriendInfo& friendInfo, const zim::ZIMError& errorInfo) {
    if(errorInfo.code == ZIMErrorCodeSuccess) {
        // ......
    } else {
        // ......
    }  
    });
1
Copied!

更新成功后,该用户可以收到 onFriendInfoUpdated 接口,得知好友信息已更新。

更新好友属性

登录 ZIM SDK 后,用户可以通过 updateFriendAttributes 更新好友属性。

说明

最多可以设置 5 个好友属性,且对应的 key 取值必须为 k0、k1、k2、k3、k4。建议您提前约定各属性的实际含义并保持统一。

更新好友属性结果通过 ZIMFriendAttributesUpdatedCallback 返回。

Untitled
// 更新好友属性
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
Copied!

更新成功后,该用户可以收到 onFriendInfoUpdated 接口,得知好友信息已更新。

检查好友关系

登录 ZIM SDK 后,用户可以通过 checkFriendsRelation 批量检查自己与至多 20 名其他用户的好友关系。

ZEGO 支持单边或双边检查好友关系,以检查用户 A 与目标用户 B 的好友关系为例:

  • 单边检查:仅检查用户 A 的好友列表是否有用户 B。
  • 双边检查:同时检查用户 A 和用户 B 的好友列表是否有对方。

检查好友关系结果通过 ZIMFriendsRelationCheckedCallback 返回。

Untitled
// 检查与其他用户的好友关系
// 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
Copied!

批量查询好友信息

登录 ZIM SDK 后,用户可以通过 queryFriendsInfo 批量查询 20 名好友信息。

批量查询好友信息结果通过 ZIMFriendsInfoQueriedCallback 返回。

Untitled
// 批量查询好友信息
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
Copied!

搜索好友

登录 ZIM SDK 后,用户可以通过 searchLocalFriends 接口,传入至多 5 个关键词,即可对好友的用户名及备注进行搜索,获取同时命中所有关键词的好友。

搜索结果通过 ZIMFriendsSearchedCallback 返回。

Untitled
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
Copied!

Previous

黑名单管理

Next

在线状态订阅