用户资料托管

概述

网易云通信提供了用户资料托管,包含生日,Email,性别,手机号码,签名和扩展字段的管理,以下几个接口仅当选择网易云通信托管用户资料时有效,如果开发者不希望网易云通信获取自己的用户数据,则需自行维护用户资料。

获取本地用户资料

/** @fn static bool GetUserNameCard(const std::list<std::string>& accids, const GetUserNameCardCallback& cb, const std::string& json_extension = "")
* 获取本地的指定帐号的用户名片
* @param[in] accids 用户ID列表
* @param[in] cb 操作结果回调
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
* @note 错误码 200:成功
*              414:参数错误
*/
static bool GetUserNameCard(const std::list<std::string>& accids, const GetUserNameCardCallback& cb, const std::string& json_extension = "");
void OnGetUserCard(const std::list<nim::UserNameCard> &result)
{
    for (auto& info : result)
    {
        //处理用户信息
    }
}

void foo()
{
    std::list<std::string> account_list;
    account_list.push_back("test1");
    account_list.push_back("test2");
    nim::User::GetUserNameCard(account_list, &OnGetUserCard);
}

获取服务器用户信息

从服务器获取用户资料,一般在本地用户资料不存在时调用,获取后 SDK 会负责更新本地数据库。每次最多获取150个用户,如果量大,上层请自行分批获取。

/** @fn static bool GetUserNameCardOnline(const std::list<std::string>& accids, const GetUserNameCardCallback& cb, const std::string& json_extension = "")
* 在线查询指定帐号的用户名片
* @param[in] accids 用户ID列表
* @param[in] cb 操作结果回调
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码 200:成功
*           414:参数错误
*           419:超限
*/
static bool GetUserNameCardOnline(const std::list<std::string>& accids, const GetUserNameCardCallback& cb, const std::string& json_extension = "");
void OnGetUserCard(const std::list<nim::UserNameCard> &result)
{
    for (auto& info : result)
    {
        //处理用户信息
    }
}

void foo()
{
    std::list<std::string> account_list;
    account_list.push_back("test1");
    account_list.push_back("test2");
    nim::User::GetUserNameCardOnline(account_list, &OnGetUserCard);
}

更新自己的信息

修改自己的用户资料,首先构造nim::UserNameCard对象,设置需要修改的属性,然后调用nim::User::UpdateMyUserNameCard进行更新。

/** @fn static bool UpdateMyUserNameCard(const UserNameCard& namecard, const UpdateMyUserNameCardCallback& cb, const std::string& json_extension = "")
* 更新自己的用户名片
* @param[in] namecard 用户名片内容
* @param[in] cb 操作结果回调
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return bool 检查参数如果不符合要求则返回失败
* @note 错误码    200:成功
*           400:非法参数
*/
static bool UpdateMyUserNameCard(const UserNameCard& namecard, const UpdateMyUserNameCardCallback& cb, const std::string& json_extension = "");
void OnUpdateMyInfo(nim::NIMResCode res)
{
    if (res == nim::kNIMResSuccess)
    {
        //信息更新成功
    }
}

void foo()
{
    nim::UserNameCard info;
    //设置属性
    info.SetName("new_name");
    nim::User::UpdateMyUserNameCard(info, &OnUpdateMyInfo);
}

用户信息变更通知

用户信息变更会通过调用nim::User::RegUserNameCardChangedCb注册的回调告知APP。

/** @fn static void RegUserNameCardChangedCb(const UserNameCardChangedCallback& cb, const std::string& json_extension = "")
* (全局回调)统一注册用户名片变更通知回调函数
* @param[in] cb 操作结果回调
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @return void 无返回值
*/
static void RegUserNameCardChangedCb(const UserNameCardChangedCallback& cb, const std::string& json_extension = "");
void OnUserInfoChange(const std::list<nim::UserNameCard> &uinfo_list)
{
    for (auto& info : uinfo_list)
    {
        if (info.ExistValue(nim::kUserNameCardKeyName) || info.ExistValue(nim::kUserNameCardKeyIconUrl)) //用户名或头像变化了
            //TODO
        if (info.ExistValue((nim::UserNameCardValueKey)(nim::kUserNameCardKeyAll - nim::kUserNameCardKeyName - nim::kUserNameCardKeyIconUrl))) //用户其他信息变化了
            //TODO
    }
}

void foo()
{
    //向SDK注册监听用户名片变化
    nim::User::RegUserNameCardChangedCb(&OnUserInfoChange);
}