用户资料托管

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

nim_user_def.h 里定义了用户信息的JSON Key。

用户信息变更会通过调用void nim_user_reg_user_name_card_changed_cb(const char *json_extension, nim_user_name_card_change_cb_func cb, const void *user_data)注册的回调告知程序:

获取本地用户资料

从本地缓存的数据中批量获取用户资料

/** @fn void nim_user_get_user_name_card(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data)
* 获取本地的指定帐号的用户名片
* @param[in] accids 例 ["litianyi01", "litianyi02", ...]
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb 操作结果回调
* @param[in] user_data APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理!
* @return void 无返回值
* @note 错误码  200:成功
*               414:参数错误
*/
NIM_SDK_DLL_API    void nim_user_get_user_name_card(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data);
void CallbackGetUserNameCard(const char *result_json, const char *json_extension, const void *callback)
{
    // 解析result_json
}

typedef void (*nim_user_get_user_name_card)(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data);

void foo(const std::list<std::string>& accids)
{
    nim_user_get_user_name_card func = (nim_user_get_user_name_card) dlsym(hInst, "nim_user_get_user_name_card");

    Json::Value values;
    for (auto iter = accids.cbegin(); iter != accids.cend(); ++iter)
        values.append(*iter);

    Json::FastWriter fw;

    func(fw.write(values).c_str(), "", &CallbackGetUserNameCard, nullptr);
}

获取服务器用户资料

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

/** @fn void nim_user_get_user_name_card_online(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data)
* 在线查询指定帐号的用户名片
* @param[in] accids 例 ["litianyi01", "litianyi02", ...]
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb 操作结果回调
* @param[in] user_data APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理!
* @return void 无返回值
* @note 错误码    200:成功
*               414:参数错误
*               419:超限
*               20000:还未初始化或初始化未正常完成
*               20001:还未登陆或登录未完成
*/
NIM_SDK_DLL_API    void nim_user_get_user_name_card_online(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data);
void CallbackGetUserNameCard(const char *result_json, const char *json_extension, const void *callback)
{
    // 解析result_json
}

typedef void (*nim_user_get_user_name_card_online)(const char *accids, const char *json_extension, nim_user_get_user_name_card_cb_func cb, const void *user_data);

void foo(const std::list<std::string>& accids)
{
    nim_user_get_user_name_card_online func = (nim_user_get_user_name_card_online) dlsym(hInst, "nim_user_get_user_name_card_online");

    Json::Value values;
    for (auto iter = accids.cbegin(); iter != accids.cend(); ++iter)
        values.append(*iter);

    Json::FastWriter fw;

    func(fw.write(values).c_str(), "", &CallbackGetUserNameCard, nullptr);
}

更新自己的信息

/** @fn void nim_user_update_my_user_name_card(const char *info_json, const char *json_extension, nim_user_update_my_name_card_cb_func cb, const void *user_data)
* 更新自己的用户名片
* @param[in] info_json 用户信息json
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb 操作结果回调
* @param[in] user_data APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理!
* @return void 无返回值
* @note 错误码    200:成功
*                400:非法参数
*/
NIM_SDK_DLL_API    void nim_user_update_my_user_name_card(const char *info_json, const char *json_extension, nim_user_update_my_name_card_cb_func cb, const void *user_data);
void CallbackUpdateNameCard(int res_code, const char *json_extension, const void *callback)
{
    //处理操作结果
}

typedef void (*nim_user_update_my_user_name_card)(const char *info_json, const char *json_extension, nim_user_update_my_name_card_cb_func cb, const void *user_data);

void foo()
{
    //修改昵称
    Json::Value values;
    values[kUInfoKeyAccid] = "litianyi02";
    values[kUInfoKeyName] = "修改后的大意的昵称";

    nim_user_update_my_user_name_card func = (nim_user_update_my_user_name_card) dlsym(hInst, "nim_user_update_my_user_name_card");
    func(values.toStyledString().c_str(), nullptr, &CallbackUpdateNameCard, nullptr);
}

用户信息变化通知

调用接口nim_user_reg_user_name_card_changed_cb注册回调,在用户资料发生变化时通过回调函数获取结果。

/** @fn void nim_user_reg_user_name_card_changed_cb(const char *json_extension, nim_user_name_card_change_cb_func cb, const void *user_data)
* (全局回调)统一注册用户名片变更通知回调函数
* @param[in] json_extension json扩展参数(备用,目前不需要)
* @param[in] cb 操作结果回调
* @param[in] user_data APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理!
* @return void 无返回值
*/
NIM_SDK_DLL_API    void nim_user_reg_user_name_card_changed_cb(const char *json_extension, nim_user_name_card_change_cb_func cb, const void *user_data);
void CallbackUserNameCardChange(const char *result_json, const char *json_extension, const void *callback)
{
    // 解析result_json获取用户信息
}

typedef void (*nim_user_reg_user_name_card_changed_cb)(const char *json_extension, nim_user_name_card_change_cb_func cb, const void *user_data);

void foo()
{
    nim_user_reg_user_name_card_changed_cb func = (nim_user_reg_user_name_card_changed_cb) dlsym(hInst, "nim_user_reg_user_name_card_changed_cb");
    func("", &CallbackUserNameCardChange, nullptr);
}