用户资料托管
更新时间: 2024/10/17 10:03:47
概述
网易云信提供了用户资料托管,包含生日,Email,性别,手机号码,签名和扩展字段的管理,以下几个接口仅当选择网易云信托管用户资料时有效,如果开发者不希望网易云信获取自己的用户数据,则需自行维护用户资料。
获取本地用户资料
- API原型
c++/** @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 = "");
- 示例
c++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个用户,如果量大,上层请自行分批获取。
- API原型
c++/** @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 = "");
- 示例
c++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
进行更新。
- API原型
c++/** @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 = "");
- 示例
c++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。
- API原型
c++/** @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 = "");
- 示例
c++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);
}
此文档是否对你有帮助?