在线状态订阅 RESTful API
更新时间:2022-06-22
本文展示如何调用环信即时通讯 RESTful API 实现用户在线状态订阅,包括设置用户在线状态信息、批量订阅和获取在线状态、取消订阅以及查询订阅列表。调用以下方法前,请先参考 使用限制 了解即时通讯 RESTful API 的调用频率限制。
使用该特性前,你需要联系商务开通。
公共参数
以下表格列举了即时通讯 RESTful API 的公共请求参数和响应参数:
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
host | String | 你在环信即时通讯云控制台注册项目时所在的集群服务器地址。 | 是 |
org_name | String | 即时通讯服务分配给每个企业(组织)的唯一标识。你可以通过控制台获取该字段。 | 是 |
app_name | String | 你在环信即时通讯云控制台注册项目时填入的应用名称。 | 是 |
uid | String | 用户在即时通讯服务器上的唯一 ID。 | 是 |
响应参数
参数 | 描述 |
---|---|
data | 实际取到的数据详情。 |
username | 用户 ID。 |
groupname | 群组名。 |
timestamp | 请求响应的时间,Unix 时间戳,单位为 ms。 |
认证方式
环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 Authorization 字段:
Authorization: Bearer ${YourAppToken}
为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 建议使用 App Token 的鉴权方式,详见 使用 Token 鉴权。
设置用户在线状态信息
根据用户的唯一 ID 设置在线状态信息。
HTTP 请求
POST https://{host}/{org_name}/{app_name}/users/{uid}/presence/{resource}/{status}
路径参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
resource | String | 设备来源,格式为设备类型 + resource ID,例如,android_123423453246。 | 是 |
status | String | 端状态码。该参数的取值如下: - 0 :离线; - 1 :在线;- 其他值:自定义在线状态。 | 是 |
其他参数及说明详见公共参数。
请求 header
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
Content-Type | String | 内容类型:application/json 。 | 是 |
Authorization | String | Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 app token 的值。 | 是 |
请求体 body
请求包体为 JSON Object 类型,包含以下字段:
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
ext | String | 在线状态扩展信息。建议不超过 64 字节。 | 是 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
result | String | 操作结果。设置成功返回 ’ok’,否则返回相应的错误原因。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考 错误码 了解可能的原因。
示例
请求示例
curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/c1/presence/android/0' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"ext":"123"}'
响应示例
{"result":"ok"}%
批量订阅在线状态
你一次可订阅多个用户的在线状态。
HTTP 请求
POST https://{host}/{org_name}/{app_name}/users/{uid}/presence/{expiry}
路径参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
expiry | String | 订阅时长,单位为秒,最长为 30 天。 | 是 |
其他参数及说明详见公共参数。
请求 header
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
Content-Type | String | 内容类型:application/json 。 | 是 |
Authorization | String | Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。 | 是 |
请求 body
请求包体为 JSON Object 类型,包含以下字段:
字段 | 类型 | 描述 | 是否必填 |
---|---|---|---|
usernames | JSON ARRAY | 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。 | 是 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 描述 |
---|---|---|
result | JSON Array | 订阅对象的在线状态信息,以数组形式返回。若订阅失败,返回相应的错误原因。 |
uid | String | 用户在即时通讯服务器的唯一 ID。 |
last_time | Number | 用户最近在线时间。服务端会在被订阅的用户登录和登出时记录该时间。 |
expiry | Number | 订阅的过期时间戳。 |
ext | String | 用户在线状态扩展信息,建议不超过 64 字节。 |
status | JSON Array | 用户多端的状态。该参数的取值如下: - 0 :离线;- 1 :在线;- 其他值:用户可设置其他值自定义在线状态。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考 错误码 了解可能的原因。
示例
请求示例
curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence/1000' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"usernames":["c2","c3"]}'
响应示例
{"result":[{"uid":"","last_time":"1644466063","expiry":"1645500371","ext":"123","status":{"android":"1","android_6b5610ac-4e11-4661-82b3-dee17bc7b2cc":"0"}},{"uid":"c3","last_time":"1645183991","expiry":"1645500371","ext":"","status":{"android":"0","android_6b5610ac-4e11-4661-82b3-dee17bc7b2cc":"0"}}]}%
批量获取在线状态信息
你一次可获取多个用户的在线状态信息。
HTTP 请求
POST https://{host}/{org_name}/{app_name}/users/{uid}/presence
路径参数
参数及说明详见公共参数。
请求 header
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
Content-Type | String | 内容类型:application/json 。 | 是 |
Authorization | String | Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。 | 是 |
请求 body
请求包体为 JSON Object 类型,仅支持以下字段:
参数 | 类型 | 是否必需 | 说明 |
---|---|---|---|
usernames | Array | 必需 | 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
参数 | 类型 | 说明 |
---|---|---|
result | JSON Array | 订阅对象的在线状态信息,以数组形式返回。若订阅失败,返回相应的错误原因。 |
uid | String | 用户在即时通讯服务器的唯一 ID。 |
last_time | Number | 用户最近在线时间。 |
ext | String | 用户在线状态的扩展信息,建议不超过 64 字节。 |
status | JSON Array | 用户多端的状态。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考错误码了解可能的原因。
示例
请求示例
curl -X POST 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '{"usernames":["c2","c3"]}'
响应示例
{
"result":[
{
"uid":"c2",
"last_time":"1644466063",
"ext":"",
"status":{
"android":"0"}
},
{
"uid":"c3",
"last_time":"1644475330",
"ext":"",
"status":{
"android":"0",
"android":"0"}
}]
}
取消订阅
你可以取消订阅用户的在线状态。
DELETE https://{host}/{org_name}/{app_name}/users/{uid}/presence
路径参数
参数及说明详见公共参数。
请求 header
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
Content-Type | String | 内容类型:application/json 。 | 是 |
Authorization | String | Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。 | 是 |
请求 body
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
users | Array | 订阅对象的用户名数组,例如 [“user1”, “user2”]。该数组最多可包含 100 个用户名。 | 是 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
参数 | 类型 | 说明 |
---|---|---|
result | String | 取消成功返回“ok”;取消失败返回相应的错误原因。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考错误码了解可能的原因。
示例
请求示例
curl -X DELETE 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json' \
-d '["c1"]'
响应示例
{"result":"ok"}%
查询订阅列表
查询当前用户已订阅在线状态的用户列表。
HTTP 请求
GET https://{host}/{org_name}/{app_name}/users/{uid}/presence/sublist?pageNum=1&pageSize=100
路径参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
pageNum | int | 要查询的页码。该参数的值须大于等于 1。 | 是 |
pageSize | int | 每页显示的订阅用户数量。 该参数的值不得超 500。 | 是 |
其他参数及说明详见公共参数。
请求 header
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
Content-Type | String | 必需 | 内容类型:application/json 。 |
Authorization | String | 必需 | Bearer ${token} Bearer 是固定字符,后面加英文空格,再加上获取到的 App Token 的值。 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示请求成功,响应包体中包含以下字段:
参数 | 类型 | 说明 |
---|---|---|
result | Object | 订阅对象在线状态信息,以数组形式返回。若查询失败,返回相应的错误原因。 |
totalnum | String | 当前订阅的用户总数。 |
sublist | Object | 订阅对象的信息,以数组形式返回。 |
uid | String | 用户在即时通讯服务器的唯一 ID。 |
expiry | String | 订阅的过期时间戳。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考错误码了解可能的原因。
示例
请求示例
curl -X GET 'a1-test.easemob.com:8089/5101220107132865/test/users/wzy/presence/sublist?pageNum=1&pageSize=100' \
-H 'Authorization: Bearer YWMtnjEbUopPEeybKGMmN0wpeZsaLSh8UEgpirS4wNAM_qx8oS2wik8R7LE4Rclv5hu9AwMAAAF-4tr__wBPGgDWGAeO86wl2lHGeTnU030fpWuEDR015Vk6ULWGYGKccA' \
-H 'Content-Type: application/json'
响应示例
{
"result":{
"totalnum":"2",
"sublist":[
{
"uid":"lxml2",
"expiry":"1645822322"},
{
"uid":"lxml1",
"expiry":"1645822322"}
]
}
}