1818
1919环信即时通讯 IM Android SDK 提供一个 [ EMUserInfoManager] ( https://sdkdocs.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_user_info_manager.html ) 类,支持获取、设置及修改用户属性信息,其中包含如下方法:
2020
21- - ` updateOwnInfo ` 设置和修改当前用户自己的属性信息 ;
22- - ` updateOwnInfoByAttribute ` 设置和修改用户信息中的某个属性 ;
23- - ` fetchUserInfoByUserId ` 获取指定用户的所有用户属性信息 ;
24- - ` fetchUserInfoByAttribute ` 获取指定环信用户 ID 和指定用户的用户属性 。
21+ - ` updateOwnInfo ` 设置和修改当前用户自己的所有属性 ;
22+ - ` updateOwnInfoByAttribute ` 设置和修改用户的某个属性 ;
23+ - ` fetchUserInfoByUserId ` 获取单个或多个用户的所有用户属性 ;
24+ - ` fetchUserInfoByAttribute ` 获取单个用户的单个或多个用户属性 。
2525
2626## 前提条件
2727
3434
3535本节介绍如何在项目中设置及获取用户属性。
3636
37- 实现过程中注意单个用户的所有属性最大不超过 2 KB,单个 app 所有用户属性数据最大不超过 10 GB。
37+ 单个用户的所有属性最大不超过 2 KB,单个 app 所有用户属性数据最大不超过 10 GB。
3838
39- ### 设置当前用户的属性
39+ ### 设置当前用户的所有属性
4040
41- 参考如下示例代码,在你的项目中当前用户设置自己的所有属性或者仅设置某一项属性。
41+ 当前用户设置自己的所有属性:
4242
4343``` java
44- // 设置所有用户属性。
4544EMUserInfo userInfo = new EMUserInfo ();
4645userInfo. setUserId(EMClient . getInstance(). getCurrentUser());
4746userInfo. setNickname(" easemob" );
@@ -60,20 +59,9 @@ EMClient.getInstance().userInfoManager().updateOwnInfo(userInfo, new EMValueCall
6059 public void onError (int error , String errorMsg ) {
6160 }
6261});
63- // 以修改用户头像为例,演示如何修改指定用户属性。
64- String url = " https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/IMDemo/avatar/Image1.png" ;
65- EMClient . getInstance(). userInfoManager(). updateOwnInfoByAttribute(EMUserInfoType . AVATAR_URL , url, new EMValueCallBack<String > () {
66- @Override
67- public void onSuccess (String value ) {
68- }
69-
70- @Override
71- public void onError (int error , String errorMsg ) {
72- }
73- });
7462```
7563
76- 关于用户属性,客户端针对用户的昵称、头像 URL、联系方式、邮箱、性别、签名、生日和扩展字段默认使用以下键名。[ 调用 RESTful 的接口设置] ( /document/server-side/userprofile.html#设置用户属性 ) 或[ 删除用户属性] ( /document/server-side/userprofile.html#删除用户属性 ) ,若要确保在客户端能够获取设置,请求中必须传以下键名与客户端保持一致,键值可根据实际使用场景确定。
64+ 关于用户属性,客户端针对用户的昵称、头像 URL、联系方式、邮箱、性别、签名、生日和扩展字段默认使用以下键名。[ 调用 RESTful 的接口设置] ( /document/server-side/userprofile.html#设置用户属性 ) 或 [ 删除用户属性] ( /document/server-side/userprofile.html#删除用户属性 ) ,若要确保在客户端能够获取设置,请求中必须传以下键名与客户端保持一致,键值可根据实际使用场景确定。
7765
7866| 字段 | 类型 | 描述 |
7967| :---------- | :----- | :------------------------------------------------------------------------------------------------ |
@@ -86,23 +74,38 @@ EMClient.getInstance().userInfoManager().updateOwnInfoByAttribute(EMUserInfoType
8674| ` birth ` | String | 用户生日。长度在 64 字符内。 |
8775| ` ext ` | String | 扩展字段。 |
8876
89- ### 获取用户属性
77+ ### 设置当前用户的单个属性
78+
79+ 例如,修改当前用户的头像:
80+
81+ ``` java
82+ String url = " https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/IMDemo/avatar/Image1.png" ;
83+ EMClient . getInstance(). userInfoManager(). updateOwnInfoByAttribute(EMUserInfoType . AVATAR_URL , url, new EMValueCallBack<String > () {
84+ @Override
85+ public void onSuccess (String value ) {
86+ }
87+
88+ @Override
89+ public void onError (int error , String errorMsg ) {
90+ }
91+ });
92+ ```
9093
91- 用户可以获取指定一个或多个用户的全部用户属性。
94+ ### 获取用户的所有属性
9295
93- 示例代码如下:
96+ 用户可以获取指定一个或多个用户的所有用户属性。
9497
9598``` java
96- // 获取一个或多个用户的所有属性,一次调用用户 ID 数量不超过 100。
99+ // 每次传入的用户 ID 数量不超过 100 个 。
97100String [] userId = new String [1 ];
98101// username 指用户 ID。
99102userId[0 ] = username;
100103EMClient . getInstance(). userInfoManager(). fetchUserInfoByUserId(userId, new EMValueCallBack<Map<String , EMUserInfo > > () {});
101104```
102105
103- ### 获取指定用户的指定用户属性
106+ ### 获取用户的指定属性
104107
105- 用户可以获取指定用户的指定用户属性信息 。
108+ 用户可以获取单个用户的单个或多个用户属性 。
106109
107110``` java
108111String [] userId = new String [1 ];
@@ -154,13 +157,13 @@ EMClient.getInstance().chatManager().sendMessage(message);
154157
155158Q:我设置了用户昵称(` nickname ` ),但调用客户端或 RESTful API 获取用户属性时,未返回用户昵称,原因是什么?
156159
157- A:你可以调用[ 客户端] ( #设置当前用户的属性 ) 或[ RESTful API] ( /document/server-side/userprofile.html#设置用户属性 ) 设置用户昵称,例如 Android 为 ` updateOwnInfo ` ,然后通过[ 客户端] ( #获取用户属性 ) 或 [ RESTful API] ( /document/server-side/userprofile.html#获取用户属性 ) 获取用户属性,例如 Android 为 ` fetchUserInfoByAttribute ` 。
160+ A:你可以调用 [ 客户端] ( #设置当前用户的所有属性 ) 或 [ RESTful API] ( /document/server-side/userprofile.html#设置用户属性 ) 设置用户昵称,例如 Android 为 ` updateOwnInfo ` ,然后通过 [ 客户端] ( #获取用户的指定属性 ) 或 [ RESTful API] ( /document/server-side/userprofile.html#获取用户属性 ) 获取用户属性,例如 Android 为 ` fetchUserInfoByAttribute ` 。
158161
159162设置用户昵称时,请注意以下两点:
160163
1611641 . 调用 RESTful 接口设置用户昵称时,若要确保在客户端能够获取设置,请求中必须传 ` nickname ` 键名。
162165
163- 2 . 调用 RESTful API [ 获取用户详情] ( /document/server-side/account_system.html#获取用户详情 ) 和[ 删除用户账户] ( /document/server-side/account_system.html#删除用户账号 ) 中返回的响应中的 ` nickname ` 参数表示为推送昵称,即离线推送时在接收方的客户端推送通知栏中显示的发送方的昵称,与用户属性中的用户昵称不同。不过,我们建议这两种昵称的设置保持一致。因此,修改其中一个昵称时,也需调用相应方法对另一个进行更新,确保设置一致。例如,对于 Android,更推送昵称的方法为 [ updatePushNickname] ( /document/android/push/push_display.html#设置推送通知的显示属性 ) ,对于 RESTful API,详见 [ 离线推送通知的显示属性配置] ( /document/server-side/push.html#设置离线推送时显示的昵称 ) 。
166+ 2 . 调用 RESTful API [ 获取用户详情] ( /document/server-side/account_system.html#获取用户详情 ) 和 [ 删除用户账户] ( /document/server-side/account_system.html#删除用户账号 ) 中返回的响应中的 ` nickname ` 参数表示为推送昵称,即离线推送时在接收方的客户端推送通知栏中显示的发送方的昵称,与用户属性中的用户昵称不同。不过,我们建议这两种昵称的设置保持一致。因此,修改其中一个昵称时,也需调用相应方法对另一个进行更新,确保设置一致。例如,对于 Android,更推送昵称的方法为 [ updatePushNickname] ( /document/android/push/push_display.html#设置推送通知的显示属性 ) ,对于 RESTful API,详见 [ 离线推送通知的显示属性配置] ( /document/server-side/push.html#设置离线推送时显示的昵称 ) 。
164167
165168Q: 调用设置或获取用户属性的接口时,上报错误码 4 的原因是什么?
166169
0 commit comments