用户关系托管
更新时间: 2024/10/17 10:03:47
用户关系托管
SDK 提供了用户好友关系管理,以及对用户会话的消息设置。在网易云信中,不是好友也允许聊天。好友关系如果不托管给网易云信,开发者需要自己在应用服务器维护。
好友关系
获取好友列表
获取我的好友帐号集合,可以根据帐号来获取对应的用户资料,见用户资料托管。好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。在函数的回调函数中可以获取到 nim::FriendProfile
对象的列表。
- API原型
c++/** @fn static void GetList(const GetFriendsListCallback& cb, const std::string& json_extension = "")
* 获取好友列表
* @param[in] cb 获取好友列表回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
* @note 错误码 200:成功
*/
static void GetList(const GetFriendsListCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnGetFriendList(nim::NIMResCode res_code, const std::list<nim::FriendProfile>& user_profile_list)
{
//处理好友列表
}
void foo()
{
nim::Friend::GetList(&OnGetFriendList);
}
添加好友
目前添加好友有两种验证类型:直接添加为好友和发起好友验证请求,两种方式的区别在于是否需要对方验证才能完成好友添加。
- API原型
c++/** @fn static bool Request(const std::string &accid, NIMVerifyType verify_type, const std::string &msg, const FriendOptCallback &cb, const std::string& json_extension = "")
* 添加、验证好友
* @param[in] accid 对方帐号
* @param[in] verify_type 好友验证类型
* @param[in] msg 验证附言
* @param[in] cb 好友请求回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
* 404:用户不存在
* 500:未知错误
*/
static bool Request(const std::string &accid, NIMVerifyType verify_type, const std::string &msg, const FriendOptCallback &cb, const std::string& json_extension = "");
-
好友验证方式
Request
函数根据verify_type
参数分为以下四种操作:| NIMVerifyType枚举 | 说明 | | :--- | :--- | | kNIMVerifyTypeAdd | 直接添加好友 | | kNIMVerifyTypeAsk | 请求添加好友,需要对方验证 | | kNIMVerifyTypeAgree | 同意其他人添加好友的请求 | | kNIMVerifyTypeReject | 拒绝添加好友请求 |
-
示例
c++void OnFriendRequest(int res_code)
{
//根据res_code 处理添加好友结果
}
void foo()
{
//直接添加好友
nim::Friend::Request("id", nim::kNIMVerifyTypeAdd, "", &OnFriendRequest);
//请求添加好友,
nim::Friend::Request("id", nim::kNIMVerifyTypeAsk, "来自xx的好友请求", &OnFriendRequest);
}
通过/拒绝添加好友请求
收到好友的验证请求的系统通知后,可以通过或者拒绝,API与添加好友相同,verify_type填kNIMVerifyTypeAgree(同意)或者kNIMVerifyTypeReject(拒绝)。
删除好友
删除好友后,将自动解除双方的好友关系,双方的好友列表中均不存在对方。删除好友后,双方依然可以聊天。
- API原型
c++/** @fn static bool Delete(const std::string &accid, const FriendOptCallback &cb, const std::string& json_extension = "")
* 删除好友
* @param[in] accid 对方帐号
* @param[in] cb 删除好友回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
* 404:用户不存在
* 500:未知错误
*/
static bool Delete(const std::string &accid, const FriendOptCallback &cb, const std::string& json_extension = "");
- 示例
c++void OnDeleteFriend(int res_code)
{
if (res_code == kNIMResSuccess)
//删除成功
else
//删除失败
}
void foo()
{
nim::Friend::Delete("id", &OnDeleteFriend);
}
好友关系变更通知
通过nim::Friend::RegChangeCb
注册好友信息变更回调,在好友关系发生变化时会收到通知。好友关系变化包括以下类型:
-
kNIMFriendChangeTypeRequest 加好友/处理好友请求
-
kNIMFriendChangeTypeDel 删除好友
-
kNIMFriendChangeTypeUpdate 好友信息更新
-
kNIMFriendChangeTypeSyncList 好友列表同步
-
API原型
c++/** @fn static void RegChangeCb(const FriendChangeCallback &cb, const std::string& json_extension = "")
* (全局回调)统一注册好友变更通知回调函数(多端同步添加、删除、更新,好友列表同步)
* @param[in] cb 好友变更通知回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
*/
static void RegChangeCb(const FriendChangeCallback &cb, const std::string& json_extension = "");
- 示例
c++void OnFriendListChange(const nim::FriendChangeEvent& change_event)
{
switch (change_event.type_)
{
case nim::kNIMFriendChangeTypeDel:
{
break;
}
case nim::kNIMFriendChangeTypeRequest:
{
break;
}
case nim::kNIMFriendChangeTypeSyncList:
{
break;
}
case nim::kNIMFriendChangeTypeUpdate:
{
break;
}
default:
break;
}
}
void foo()
{
//向SDK注册监听好友列表变化
nim::Friend::RegChangeCb(&OnFriendListChange);
}
根据用户账号获取好友关系
- API原型
c++/** @fn static void GetFriendProfile(const std::string &accid, const GetFriendProfileCallback& cb, const std::string& json_extension = "")
* 获取好友信息
* @param[in] accid 对方帐号
* @param[in] cb 获取好友信息回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
*/
static void GetFriendProfile(const std::string &accid, const GetFriendProfileCallback& cb, const std::string& json_extension = "");
更新好友关系
目前支持更新好友的备注名
- API原型
c++/** @fn static bool Update(const std::string &friend_json, const FriendOptCallback &cb, const std::string& json_extension = "")
* 更新好友资料
* @param[in] friend_profile 好友资料
* @param[in] cb 更新好友资料回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
* 404:用户不存在
* 500:未知错误
*/
static bool Update(const FriendProfile &friend_profile, const FriendOptCallback &cb, const std::string& json_extension = "");
- 示例
c++void foo()
{
nim::FriendProfile profile;
profile.SetAccId("FRIEND ID");
profile.SetAlias("ALIAS");
nim::Friend::Update(profile, nullptr);
}
黑名单
网易云信中,黑名单和用户关系是互相独立的,即修改用户关系不会影响黑名单关系,同时,修改黑名单也不会对用户关系进行操作。将用户加入黑名单后,将不在收到对方发来的任何消息或者请求。例如:A用户将B用户加入黑名单,B用户发送的消息,A用户将收不到。A用户发送的消息,B用户依然可以看到。
加入/移出黑名单
- API原型
c++/** @fn static bool SetBlack(const std::string& accid, bool set_black, const SetBlackCallback& cb, const std::string& json_extension = "")
* 设置、取消设置黑名单
* @param[in] accid 好友id
* @param[in] set_black 取消或设置
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
* 419:黑名单数量超过上限
*/
static bool SetBlack(const std::string& accid, bool set_black, const SetBlackCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnSetBlackCb(int res_code, const std::string& accid, bool opt)
{
//res_code:操作结果
//accid:用户ID
//opt:true-加入黑名单操作,false-移出黑名单操作
}
void foo()
{
nim::User::SetBlack("accid", true, &OnSetBlackCb);
}
获取黑名单列表
- API原型
c++/** @fn static void GetBlacklist(const GetBlackListCallback& cb, const std::string& json_extension = "")
* 获得黑名单名单
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb
* @return void 无返回值
*/
static void GetBlacklist(const GetBlackListCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnGetBlackListCallback(nim::NIMResCode res_code, const std::list<nim::BlackListInfo>& lists)
{
if (res_code == nim::kNIMResSuccess)
{
for (auto& info : lists)
{
//从列表中获取黑名单中的好友
}
}
}
void foo()
{
nim::User::GetBlacklist(&OnGetBlackListCallback);
}
监听黑名单变化
黑名单列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。通过注册用户关系变更通知回调获取当前数据变化。
- API原型
c++/** @fn static void RegSpecialRelationshipChangedCb(const SpecialRelationshipChangedCallback& cb, const std::string& json_extension = "")
* (全局回调)统一注册用户属性变更通知回调函数(多端同步黑名单、静音名单变更)
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb
* @return void 无返回值
*/
static void RegSpecialRelationshipChangedCb(const SpecialRelationshipChangedCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnMuteBlackEventCallback(const nim::SpecialRelationshipChangeEvent& change_event)
{
switch (change_event.type_)
{
case nim::NIMUserSpecialRelationshipChangeType::kNIMUserSpecialRelationshipChangeTypeMarkBlack:
{
//设置或取消黑名单
break;
}
case nim::NIMUserSpecialRelationshipChangeType::kNIMUserSpecialRelationshipChangeTypeMarkMute:
{
//设置或关闭消息提醒
break;
}
case nim::NIMUserSpecialRelationshipChangeType::kNIMUserSpecialRelationshipChangeTypeSyncMuteAndBlackList:
{
//同步黑名单和静音成员列表
break;
}
}
}
void foo()
{
nim::User::RegSpecialRelationshipChangedCb(&OnMuteBlackEventCallback);
}
消息提醒
易云通信中,可以单独设置是否开启某个用户的消息提醒,即对某个用户静音。静音关系和用户关系是互相独立的,修改用户关系不会影响静音关系,同时,修改静音关系也不会对用户关系进行操作。
设置/关闭消息提醒
- API原型
c++/** @fn static bool SetMute(const std::string& accid, bool set_mute, const SetMuteCallback& cb, const std::string& json_extension = "")
* 设置/关闭消息提醒
* @param[in] accid 好友id
* @param[in] set_mute 取消或设置
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
* 419:静音列表数量超过上限
*/
static bool SetMute(const std::string& accid, bool set_mute, const SetMuteCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnSetMuteCb(int res_code, const std::string& accid, bool opt)
{
//res_code:操作结果
//accid:用户ID
//opt:true-设置,false-关闭
}
void foo()
{
nim::User::SetMute("accid", true, &OnSetMuteCb);
}
获取静音账号列表
- API原型
c++/** @fn static void GetMutelist(const GetMuteListCallback& cb, const std::string& json_extension = "")
* 获得静音名单列表
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
*/
static void GetMutelist(const GetMuteListCallback& cb, const std::string& json_extension = "");
- 示例
c++void OnGetMuteListCallback(nim::NIMResCode res_code, const std::list<nim::MuteListInfo>& lists)
{
if (res_code == nim::kNIMResSuccess)
{
for (auto& info : lists)
{
//从列表中获取关闭消息提醒的好友
}
}
}
void foo()
{
nim::User::GetMutelist(&OnGetMuteListCallback);
}
监听消息提醒变化
静音名单列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。通过nim::User::RegSpecialRelationshipChangedCb
注册用户关系变更通知回调获取当前数据变化。参考监听黑名单变化。