更新时间:2022-06-30
用户属性指实时消息互动用户的信息,如用户昵称、头像、邮箱、电话、性别、签名、生日等。
例如,在招聘场景下,利用用户属性功能,可以存储性别、邮箱、用户类型(面试者)、职位类型(web 研发)等。当查看用户信息时,可以直接查询服务器存储的用户属性信息。
环信即时通讯提供给开发者从服务端 REST API 接口管理相关用户属性信息的方式。
注意
为保证用户信息安全,环信即时通讯 IM 仅支持用户本人或 app 管理员设置用户属性。
可以调用以下 REST API 来实现用户属性功能:
| 主要功能 | 功能描述 | 
|---|---|
| 设置用户属性 | 设置指定的用户的属性。 | 
| 获取指定用户的所有用户属性 | 获取指定用户的所有属性。 | 
| 批量获取用户属性 | 根据指定的用户名列表和属性列表查询用户属性。 | 
| 删除用户属性 | 删除指定用户的所有属性。 | 
| 获取用户属性总量大小 | 获取该 app 下所有用户的属性总大小。 | 
要调用环信即时通讯 RESTful API,请确保满足以下要求:
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
host       | String | 是 | 你在环信即时通讯 IM 管理后台注册项目时所在的集群服务器地址。 | 
org_name   | String | 是 | 即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。 | 
app_name   | String | 是 | 你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。 | 
username   | String | 是 | 用户 ID。 | 
| 参数 | 类型 | 描述 | 
|---|---|---|
action            | String | 请求方式,即接口方法名。 | 
organization      | String | 即 org_name,即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。   | 
	
application       | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | 
applicationName   | String | 即 app_name,你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。           | 
	
uri               | String | 请求 URL。 | 
path              | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | 
entities          | Object | 详细信息。 | 
data              | Object | 实际获取的数据详情。 | 
username          | String | 用户 ID。 | 
data.nickname     | String | 用户昵称。 | 
data.ext          | String | 你自定义的用户属性扩展字段。 | 
data.avatarurl    | String | 用户头像 URL。 | 
timestamp         | Long | Unix 时间戳,单位为毫秒。 | 
duration          | Long | 请求响应时间,单位为毫秒。 | 
环信即时通讯 IM REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 Authorization 字段:
Authorization:Bearer ${YourToken}
为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的 鉴权方式,详见 使用环信 App Token 鉴权。
用户属性的内容为一个或多个纯文本键值对,默认单一用户的属性总长不得超过 2 KB,默认一个 app 下所有用户的所有属性总长不得超过 10 GB。
请求示例中使用的键是 avatarurl、ext、nickname,你可以根据实际使用场景决定键值。
PUT https://{host}/{org_name}/{app_name}/metadata/user/{username}
参数及说明详见公共参数。
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
Content-Type    | String | 是 | 内容类型。请填 application/x-www-form-urlencoded。                                             | 
	
Authorization   | String | 是 | 该用户或管理员的鉴权 token,格式为 Bearer ${token},其中 Bearer 是固定字符,后面加英文空格,再加获取到的 token 值。   | 
	
| 参数 | 类型 | 
|---|---|
key1   | String | 
key2   | String | 
key3   | String | 
| … | … | 
keyN   | String | 
请求体的长度限制:
用户属性键值对的 JSON String 长度不能 超过 4 KB。
比如:
requestBody = ‘name=ken&employer=easemob&title=developer’
JSONString = ‘{“name”:“ken”, “employer”:“easemob”, “title”:“developer”}’
这个 JSONString 的总长度不得超过 4 KB。
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
| 字段 | 类型 | 描述 | 
|---|---|---|
data   | Object | 用户属性键值对。 | 
其他字段及说明详见公共参数。
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考响应状态码了解可能的原因。
# 将 <YourToken> 替换为你在服务端生成的 Token
curl -X PUT -H 'Content-Type: application/x-www-form-urlencoded' -H 'Authorization: Bearer <YourToken>' -d 'avatarurl=http://www.easemob.com/avatar.png&ext=ext&nickname=nickname' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
{
    "timestamp":1620445147011,
    "data":{
        "ext":"ext",
        "nickname":"nickname",
        "avatarurl":"http://www.easemob.com/avatar.png"
    },
    "duration":166
}
获取指定用户的所有用户属性键值对。需要在请求时对应填写 {username},需要获取用户属性的用户 ID。
如果指定的用户或用户属性不存在,返回空数据 {}。
GET https://{host}/{org_name}/{app_name}/metadata/user/{username}
参数及说明详见公共参数。
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
Content-Type    | String | 是 | 内容类型。请填 application/json。                                                              | 
	
Authorization   | String | 是 | 该用户或管理员的鉴权 token,格式为 Bearer ${token},其中 Bearer 是固定字符,后面加英文空格,再加获取到的 token 值。   | 
	
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
| 字段 | 类型 | 描述 | 
|---|---|---|
data   | Object | 用户属性键值对。 | 
其他字段及说明详见公共参数。
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考响应状态码了解可能的原因。
# 将 <YourToken> 替换为你在服务端生成的 Token
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer <YourToken>' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
{
    "timestamp":1620445147011,
    "data":{
        "ext":"ext",
        "nickname":"nickname",
        "avatarurl":"http://www.easemob.com/avatar.png"
    },
    "duration":166
}
根据指定的用户名列表和属性列表,查询用户属性。
如果指定的用户或用户属性不存在,返回空数据 {}。 每次最多指定 100 个用户。
POST https://{host}/{org_name}/{app_name}/metadata/user/get
参数及说明详见公共参数。
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
Content-Type    | String | 是 | 内容类型。请填 application/json。                                                              | 
	
Authorization   | String | 是 | 该用户或管理员的鉴权 token,格式为 Bearer ${token},其中 Bearer 是固定字符,后面加英文空格,再加获取到的 token 值。   | 
	
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
targets      | Array | 是 | 用户名列表,最多 100 个用户名。 | 
properties   | Array | 是 | 属性名列表,查询结果只返回该列表中包含的属性,不在该列表中的属性将被忽略。 | 
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
| 字段 | 类型 | 描述 | 
|---|---|---|
data   | Object | 用户属性键值对。 | 
其他字段及说明详见公共参数。
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考响应状态码了解可能的原因。
# 将 <YourToken> 替换为你在服务端生成的 Token
curl -X POST -H 'Content-Type:  application/json' -H 'Authorization: Bearer <YourToken>' -d '{
  "properties": [
    "avatarurl",
    "ext",
    "nickname"
  ],
  "targets": [
    "user1",
    "user2",
    "user3"
  ]
}' 'http://XXXX/XXXX/XXXX/metadata/user/get'
{
    "timestamp":1620448826647,
    "data":{
        "user1":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        },
        "user2":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        },
        "user3":{
            "ext":"ext",
            "nickname":"nickname",
            "avatarurl":"http://www.easemob.com/avatar.png"
        }
    },
    "duration":3
}
获取该 app 下所有用户的属性数据大小,单位为字节。
GET https://{host}/{org_name}/{app_name}/metadata/user/capacity
参数及说明详见公共参数。
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
Authorization   | String | 是 | 该用户或管理员的鉴权 token,格式为 Bearer ${token},其中 Bearer 是固定字符,后面加英文空格,再加获取到的 token 值。   | 
	
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
| 参数 | 类型 | 描述 | 
|---|---|---|
data   | Long | 该 app 下所有用户属性的数据大小,单位为字节。 | 
其他字段及说明详见公共参数。
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考响应状态码了解可能的原因。
# 将 <YourToken> 替换为你在服务端生成的 Token
curl -X GET -H 'Authorization: Bearer <YourToken>' 'http://XXXX/XXXX/XXXX/metadata/user/capacity'
{
    "timestamp": 1620447051368,
    "data": 1673,
    "duration": 55
}
删除指定用户的所有属性。如果指定的用户或用户属性不存在(可能已删除),也视为删除成功。
DELETE https://{host}/{org_name}/{app_name}/metadata/user/{username}
参数及说明详见公共参数。
| 参数 | 类型 | 是否必需 | 描述 | 
|---|---|---|---|
Authorization   | String | 是 | 该用户或管理员的鉴权 token,格式为 Bearer ${token},其中 Bearer 是固定字符,后面加英文空格,再加获取到的 token 值。   | 
	
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
| 参数 | 类型 | 描述 | 
|---|---|---|
data   | Bool | 是否删除成功: - true:是;- false:否。   | 
	
其他字段及说明详见公共参数。
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考响应状态码了解可能的原因。
# 将 <YourToken> 替换为你在服务端生成的 Token
curl -X DELETE -H 'Authorization: Bearer <YourToken>' 'http://XXXX/XXXX/XXXX/metadata/user/user1'
{
    "timestamp": 1616573382270,
    "duration": 10,
    "data": true
}