====== 用户体系集成 ======
更新时间:2021-12-31 该文档已不再维护,请看新版 3.X 文档。
新版文档见:[[ccim:rest:accountsystem|用户体系集成]]。
----
===== 概述 =====
介绍 AppKey 和环信 ID 的数据结构以及使用规则。
==== Appkey 数据结构 ====
当您申请了 AppKey 后,会得到一个 **xxxx#xxxx** 格式的字符串,字符串只能由小写字母数字组成,AppKey 是环信应用的唯一标识。前半部分 **org_name** 是在多租户体系下的唯一租户标识,后半部分 **app_name** 是租户下的 App 唯一标识(在环信后台创建一个 App 时填写的应用 ID 即是 app_name )。下述的 REST API 中,**/{org_name}/{app_name}** 的请求,均是针对一个唯一的 AppKey 进行的。目前环信注册的 AppKey 暂不能由用户自己完成删除操作,如果对 APP 删除需要联系环信操作完成。
^Appkey ^xxxx ^分隔符 ^xxxx ^描述^
|环信应用的唯一标识|org_name |#|app_name| app_name 只能是字母、数字、横线组合。长度不能超过 32 字符。|
==== 环信 ID 数据结构 ====
环信作为一个聊天通道,只需要提供环信 ID (也就是 IM 用户名)和密码就够了。
^名称 ^字段名 ^数据类型 ^描述^
|环信 ID |username |String |在 AppKey 的范围内唯一用户名,用户 ID 的长度在 64 字节以内。|
|用户密码 |password |String |用户登录环信使用的密码。|
==== 环信 ID 使用规则 ====
当 APP 和环信集成的时候,需要把 APP 系统内的已有用户和新注册的用户和环信集成,为每个已有用户创建一个环信的账号(环信 ID),并且 APP 有新用户注册的时候,需要同步的在环信中注册。
**在注册环信账户的时候,需要注意环信 ID 的规则:**
* 使用英文字母和(或)数字的组合
* 不能使用中文
* 不能使用 email 地址
* 不能使用 UUID
* 用户 ID 的长度在 64 字节以内
* 中间不能有空格或者井号(#)等特殊字符
* 允许的用户名正则 “[a-z0-9_-.]*”(a~z小写字母/数字/下划线/横线/英文句号),其他都不允许 **如果是大写字母会自动转成小写**
* 不区分大小写。系统忽略大小写,认为 AA、Aa、aa、aA 都是一样的。如果系统已经存在了环信 ID 为 AA 的用户,再试图使用 aa 作为环信 ID 注册新用户,系统返回用户名重复,以此类推, 因此建议用户使用小写字母,否则可能遇到一些异常情况。但是请注意:环信 ID 在数据上的表现形式还是用户最初注册的形式,注册时候使用的大写就保存大写,是小写就保存小写。即:使用 AA 注册,环信保存的 ID 就是 AA;使用 Aa 注册,环信保存的 ID 就是 Aa,以此类推。
另:本文档中可能会交错使用“环信 ID”和“环信用户名”两个术语,但是请注意,这里两个的意思是一样的。
因为一个用户的环信 ID 和他的在 APP 中的用户名并不需要一致,只需要有一个明确的对应关系。例如,用户名是 example@easemob.com,当这个用户登录到 APP 的时候,可以登录成功之后,再登录环信的服务器,所以这时候,只需要能够从 example@easemob.com 推导出这个用户的环信 ID 即可。
**注意:**以下所有 API 均需要 org 管理员或 APP 管理员权限才能访问。
强烈建议保护好 org 管理员,APP 管理员的用户名和密码以及 APP 的 client_id 和 client_secret,尽量只在 APP 的服务器后台对环信用户做增删改查的管理,包括新用户注册。为了您的信息安全,请一定不要将 org 管理员或 APP 管理员的用户名和密码写死在手机客户端中,因为手机 APP 很容易被反编译,从而导致别人获取到您的管理员账号和密码,导致数据泄露。
----
====== REST API ======
介绍关于 IM 用户体系集成过程中,需要使用到的 REST API 文档详细说明,可以通过使用文档中嵌入的[[http://api-docs.easemob.com/|Easemob REST API]]进行在线测试。
===== 请求域名 =====
环信不同数据中心的REST API请求域名:
|数据中心|REST API请求地址|WebSocket访问域名|
|国内1区|a1.easemob.com 或 a1.easecdn.com|im-api-v2.easemob.com 或 im-api-v2.easecdn.com|
|国内2区|a31.easemob.com 或 a31.easecdn.com|im-api-v2-31.easemob.com 或 im-api-v2-31.easecdn.com|
|国内VIP区|请咨询商务经理|请咨询商务经理|
|客服专用|请咨询商务经理|请咨询商务经理|
|新加坡1区|a1-sgp.easemob.com 或 a1-sgp.easecdn.com|im-api-sgp-v2.easemob.com 或 im-api-sgp-v2.easecdn.com|
|美东1区|a41.easemob.com 或 a41.easecdn.com|msync-api-41.easemob.com 或 msync-api-41.easecdn.com|
|法兰克福1区|a51.easemob.com 或 a51.easecdn.com|msync-api-51.easemob.com 或 msync-api-51.easecdn.com|
应用所在数据中心可以在环信用户管理后台>应用列表找到对应的appkey点击"查看">即时通讯>服务概览中查看:
{{im:000quickstart:console-查看restapi访问地址.jpg?800|}}
**注意:**
1.为满足不同客户的业务需求,环信在多地部署了数据中心。不同数据中心的 REST API 请求域名不同。请根据您所在数据中心选择请求域名。
2.国内 VIP 区、客服专区客户请联系商务经理索要 REST API 请求地址。
3.支持 HTTP 和 HTTPS。
===== 获取管理员权限token =====
环信提供的 REST API 需要权限才能访问,权限通过发送 HTTP 请求时携带 token 来体现,下面描述获取 token 的方式。说明:API 描述的时候使用到的 {APP 的 client_id} 之类的这种参数需要替换成具体的值。
**重要提醒:
** 获取 token 时服务器会返回 token 有效期,具体值参考接口返回的 expires_in 字段值。由于网络延迟等原因,系统不保证 token 在此值表示的有效期内绝对有效,如果发现 token 使用异常请重新获取新的 token,比如“http response code”返回 401。另外,请不要频繁向服务器发送获取 token 的请求,同一账号发送此请求超过一定频率会被服务器封号,切记,切记!!
client_id 和 client_secret 可以在环信管理后台的 [[http://www.google.com|APP 详情页面]]看到。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90 |}}^/**{org_name}/{app_name}/token**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
=== Request Body ===
^参数^说明^
|grant_type|client_credentials|
|client_id|App的client_id,可在[[https://console.easemob.com/app-detail/detail|app详情页找到]]|
|client_secret|App的client_secret,可在[[https://console.easemob.com/app-detail/detail|app详情页找到]]|
|client_secret|App的client_secret,可在[[https://console.easemob.com/app-detail/detail|app详情页找到]]|
|''%%ttl%%'' |String | 必需 |token 有效期,单位为秒(s)。此外,也可通过环信即时通讯云控制台设置,参见 [[https://console.easemob.com/app/applicationOverview/userManagement|用户认证详情页面]]。该参数值以最新设置为准。|
=== Response Body ===
^参数^说明^
|access_token |有效的token字符串|
|expires_in |token 有效期,单位为秒(s)。|
|application |当前 App 的 UUID 值|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
"grant_type": "client_credentials",
"client_id": "YXA6i-Ak8Ol4Eei2l11ZjV-EAg",
"client_secret": "YXA6VunqiNxoB7IwXHInk1cGiXOOJfc",
"ttl": "1024000"
}' 'http://a1.easemob.com/easemob-demo/testapp/token'
=== 可能返回的结果示例 ===
**返回值200,表示成功返回token**
{
"access_token": "YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw",
"expires_in": 5184000,
"application": "8be024f0-e978-11e8-b697-5d598d5f8402"
}
**返回值400,表示 client_id 或 client_secret 错误**
{
"access_token": "YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw",
"expires_in": 1024000,
"application": "8be024f0-e978-11e8-b697-5d598d5f8402"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
===== 用户管理 =====
环信提供多个接口实现对 IM 用户的注册、获取、修改、删除等管理功能。
^名称^请求^描述^
|注册单个用户|/{org_name}/{app_name}/users|注册一个 IM 用户,有**开放注册**和**授权注册**两种模式|
|批量注册用户|/{org_name}/{app_name}/users|注册多个 IM 用户,仅支持授权注册|
|获取单个用户|/{org_name}/{app_name}/users/{username}|获取单个 IM 用户|
|批量获取用户|/{org_name}/{app_name}/users|获取应用下的多个 IM 用户|
|删除单个用户|/{org_name}/{app_name}/users/{username}|删除单个 IM 用户|
|批量删除用户|/{org_name}/{app_name}/users|批量删除多个 IM 用户|
|修改用户密码|/{org_name}/{app_name}/users/{username}/password|修改 IM 用户的密码|
|设置推送消息显示昵称|/{org_name}/{app_name}/users/{username}|设置 IM 用户推送消息显示的昵称|
|设置推送消息展示方式|/{org_name}/{app_name}/users/{username}|设置 IM 用户推送消息展示为仅通知还是详情可见|
|设置免打扰|/{org_name}/{app_name}/users/{username}|设置 IM 用户是否开启免打扰模式,以及开启/关闭免打扰的时间|
在 URL 指定的 org 和 APP 中创建一个新的用户,分两种模式:**开放注册**和**授权注册**。
* “开放注册”模式:注册环信账号时,不用携带管理员身份认证信息;
* “授权注册”模式:注册环信账号时,必须携带管理员身份认证信息。推荐使用“授权注册”,这样可以防止某些已经获取了注册 URL 和知晓注册流程的人恶意向服务器大量注册垃圾用户。
**注意:**
* 以下 API 中提到的 ${token} 是个变量,使用时需要替换成通过 APP 的 client_id 和 client_secret 获取到的 token。
* 在注册环信 id 时,建议不要使用有序的 id 进行注册,防止其他人知道注册 id 的顺序,恶意发送大量的垃圾消息。
* 服务器端给自己用户注册账号的同时,在调用环信的rest接口给用户在注册一个环信id与自己的用户绑定,并返回给客户端,客户端拿到自己服务器用户的账号密码登录后,在拿环信id密码在登录环信服务器。
==== 注册单个用户(开放) ====
用户可以在登录客户端 SDK 后自行通过账号密码注册账号的接口。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90 |}}^**/{org_name}/{app_name}/users**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
=== Request Body ===
^参数^说明^
|username|环信 ID ;也就是 IM 用户名的唯一登录账号,长度不可超过64个字符长度|
|password|登录密码,长度不可超过64个字符长度|
|nickname|iOS推送昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,长度不可超过100个字符,如果需要环信存储用户昵称,头像等个人信息的,请参考[[https://docs-im.easemob.com/im/server/ready/usermetadata#%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7|用户属性]]|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|nickname|iOS推送昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,长度不可超过100个字符|
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
=== 请求示例 ===
curl -X POST -i "https://a1.easemob.com/easemob-demo/testapp/users" -d '{"username":"user1","password":"123","nickname":"testuser"}'
=== 可能返回的结果示例 ===
**返回值200,表示创建 IM 用户成功**
{
"action": "post",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "0ffe2d80-ed76-11e8-8d66-279e3e1c214b",
"type": "user",
"created": 1542795196504,
"modified": 1542795196504,
"username": "user1",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542795196515,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值400,表示用户已存在、用户名或密码为空、用户名不合法**
{
"error": "duplicate_unique_property_exists",
"timestamp": 1542795141631,
"duration": 0,
"exception": "org.apache.usergrid.persistence.exceptions.DuplicateUniquePropertyExistsException",
"error_description": "Application null Entity user requires that property named username be unique, value of User1 exists"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 注册单个用户(授权) ====
服务端需要校验有效的token权限才能进行操作,授权注册的接口。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90 |}}^**/{org_name}/{app_name}/users**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|username|环信 ID ;也就是 IM 用户的唯一登录账号,长度不可超过64个字符长度|
|password|登录密码,长度不可超过64个字符长度|
|nickname|iOS推送昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,长度不可超过100个字符,如果需要环信存储用户昵称,头像等个人信息的,请参考[[https://docs-im.easemob.com/im/server/ready/usermetadata#%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7|用户属性]]|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|nickname|昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,环信是不保存用户昵称,头像等个人信息的,需要自己服务器保存并与给自己用户注册的IM用户名绑定|
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer WMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw12' -d '[
{
"username": "user1",
"password": "123",
"nickname": "testuser"
}
]' 'http://a1.easemob.com/easemob-demo/testapp/users'
=== 可能返回的结果示例 ===
**返回值200,表示创建 IM 用户成功**
{
"action": "post",
"application": "a2e433a0-ab1a-11e2-a134-85fca932f094",
"params": {},
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [{
"uuid": "7f90f7ca-bb24-11e2-b2d0-6d8e359945e4",
"type": "user",
"created": 1368377620796,
"modified": 1368377620796,
"username": "user1",
"activated": true
"nickname": "testuser"
}],
"timestamp": 1368377620793,
"duration": 125,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值400,表示用户已存在、用户名或密码为空、用户名不合法**
{
"error": "duplicate_unique_property_exists",
"timestamp": 1537871738097,
"duration": 0,
"exception": "org.apache.usergrid.persistence.exceptions.DuplicateUniquePropertyExistsException",
"error_description": "Application null Entity user requires that property named username be unique, value of ccccc1 exists"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "auth_bad_access_token",
"timestamp": 1543479294349,
"duration": 0,
"exception": "org.apache.usergrid.rest.exceptions.SecurityException",
"error_description": "Unable to authenticate due to corrupt access token"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 批量注册用户 ====
批量注册是授权注册方式,服务端需要校验有效的token权限才能进行操作。每次调用接口时,注册用户数量有最大限制,详见[[im:server:help:restastrict|接口限流说明]]。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90 |}}^**/{org_name}/{app_name}/users**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|username|环信 ID ;也就是 IM 用户的唯一登录账号,长度不可超过64个字符|
|password|登录密码,长度不可超过64个字符|
|nickname|iOS推送昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,长度不可超过100个字符,如果需要环信存储用户昵称,头像等个人信息的,请参考[[https://docs-im.easemob.com/im/server/ready/usermetadata#%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7|用户属性]]|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|nickname|昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,环信是不保存用户昵称,头像等个人信息的,需要自己服务器保存并与给自己用户注册的IM用户名绑定|
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
=== 请求示例1 ===
curl -X POST -H "Authorization: Bearer YWMtP_8IisA-EeK-a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEUE" -i "https://a1.easemob.com/easemob-demo/testapp/users" -d '[{"username":"user1", "password":"123","nickname":"testuser1"}, {"username":"user2", "password":"456","nickname":"testuser2"}]'
=== 可能返回的结果示例 ===
**返回值200,表示成功返回token**
{
"action": "post",
"application": "22bcffa0-8f86-11e6-9df8-516f6df68c6d",
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "278b5e60-e27b-11e8-8f9b-d5d83ebec806",
"type": "user",
"created": 1541587920710,
"modified": 1541587920710,
"username": "user1",
"activated": true,
"nickname": "testuser1"
},
{
"uuid": "278bac80-e27b-11e8-b192-73e4cd5078a5",
"type": "user",
"created": 1541587920712,
"modified": 1541587920712,
"username": "user2",
"activated": true,
"nickname": "testuser2"
}
],
"timestamp": 1541587920714,
"data": [],
"duration": 0,
"organization": "1122161011178276",
"applicationName": "testapp"
}
=== 请求示例2 ===
curl -X POST -H "Authorization: Bearer YWMtP_8IisA-EeK-a5cNq4Jt3QAAAT7fI10IbPuKdRxUTjA9CNiZMnQIgk0LEUE" -i "https://a1.easemob.com/easemob-demo/testapp/users" -d '[{"username":"user1", "password":"123","nickname":"testuser1"}, {"username":"user2", "password":"456","nickname":"testuser2"}, {"username":"user3", "password":"789","nickname":"testuser3"}]'
当请求 body 中存在已经注册过的 user3 时,那么请求会成功并且user1、user2也会注册成功,response 中的 data 数组内是返回存在问题的用户。
=== 可能返回的结果示例 ===
**返回值200,表示成功返回token**
{
"action": "post",
"application": "22bcffa0-8f86-11e6-9df8-516f6df68c6d",
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "278b5e60-e27b-11e8-8f9b-d5d83ebec806",
"type": "user",
"created": 1541587920710,
"modified": 1541587920710,
"username": "user1",
"activated": true,
"nickname": "testuser1"
},
{
"uuid": "278bac80-e27b-11e8-b192-73e4cd5078a5",
"type": "user",
"created": 1541587920712,
"modified": 1541587920712,
"username": "user2",
"activated": true,
"nickname": "testuser2"
}
],
"timestamp": 1541587920714,
"data": [
{
"username": "user3",
"registerUserFailReason": "the user3 already exists"
}
],
"duration": 0,
"organization": "1122161011178276",
"applicationName": "testapp"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
===== 获取用户token =====
环信提供2种方式进行登录:1.使用“用户名”和“密码”进行登录;2.使用”用户名“+”用户Token"进行登录
方式1:在SDK进行登录时,使用“用户名”和“密码”进行登录。
该方式集成相对简单,用户注册后,直接使用“用户名”和“密码”进行登录。登录成功后,SDK会获取一个长期的用户token。
方式2:开发者使用RESTful API在自己的应用服务器管理用户token,在端上登录时,由应用服务器下发用户token,SDK使用用户名和用户token进行登录。
该方式开发者可以对用户token进行管理。获取用户token时,可以设置token有效期。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90 |}}^/**{org_name}/{app_name}/token**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
=== Request Body ===
^参数^说明^
|grant_type|password|
|username|用户名|
|password|密码|
|ttl|token 有效期,单位为秒(s)。此外,也可通过环信即时通讯云控制台设置,参见 [[https://console.easemob.com/app/applicationOverview/userManagement|用户认证详情页面]]。该参数值以最新设置为准。|
=== Response Body ===
^参数^说明^
|access_token |有效的用户token字符串|
|expires_in |token 有效时间,以秒为单位,在有效期内不需要重复获取|
|user |UUID:用户的UUID、type:用户类型、created:创建时间、modified:修改时间、username:用户名、activated:是否激活|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
"grant_type": "password",
"username": "C",
"password": "1"
"ttl": "1024000"
}' 'http://a1.easemob.com/easemob-demo/testapp/token'
=== 可能返回的结果示例 ===
**返回值200,表示成功返回token**
{
"access_token": "YWMtrR6ECkz8Eeyx6Y9j1eX9kbsMrFep3U6BvVj7KSnNonWqRx7gTPwR7Kzl-Q_xISNOAwMAAAF9UPZqbQAPoAAtYK9fWgaTNyuWoB3-6nGf_TXBx3Nt3XRZST-elU0x2A",
"expires_in": 1024000,
"user": {
"uuid": "aa471ee0-4cfc-11ec-ace5-f90ff121234e",
"type": "user",
"created": 1637740861395,
"modified": 1637740861395,
"username": "c",
"activated": true
}
}
**返回值400,表示 username 或 password 错误**
{
"error": "invalid_grant",
"timestamp": 1637741269908,
"duration": 0,
"error_description": "invalid password"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 获取单个用户 ====
获取单个 IM 用户的详细信息接口。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90 |}}^**/{org_name}/{app_name}/users/{username}**^
需要在请求时对应填写{username},需要获取的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
|nickname|昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,环信是不保存用户昵称,头像等个人信息的,需要自己服务器保存并与给自己用户注册的IM用户名绑定|
|notification_display_style|消息提醒方式,“0”仅通知,“1“通知以及消息详情,没有设置返不会返回|
|notification_no_disturbing|免打扰的设置。"false"代表免打扰关闭,“true”免打扰开启,没有设置返不会返回|
|notification_no_disturbing_start|免打扰的开始时间。数字代表开始时间,例如“8”代表每日8:00开启免打扰,没有设置则不会返回|
|notification_no_disturbing_end|免打扰的结束时间。数字代表结束时间,例如“18”代表每日18:00关闭免打扰,没有设置则不会返回|
|notification_ignore_63112447328257|屏蔽/取消屏蔽群组消息的离线推送的设置。数字代表群组id,“true”已屏蔽,“false“未屏蔽,没有设置则不会返回|
|notifier_name|客户端推送证书名称,没有设置则不会返回|
|device_token|推送token,没有则不会返回|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1'
=== 可能返回的结果示例 ===
**返回值200,表示获取用户信息成功**
{
"action": "get",
"path": "/users",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1",
"entities": [
{
"uuid": "0ffe2d80-ed76-11e8-8d66-279e3e1c214b",
"type": "user",
"created": 1542795196504,
"modified": 1542795196504,
"username": "user1",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542798985011,
"duration": 6,
"count": 1
}
**返回值404,表示该用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542799099701,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542799184277,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/b2aade90-e978-11e8-a974-f3368f82e4f1]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 批量获取用户 ====
该接口默认返回按照创建时间排序,如果需要指定获取数量,需加上参数 limit=N,N 为数量值。关于分页:如果 DB 中的数量大于 N,返回 JSON 会携带一个字段“cursor”,我们把它叫做”游标”,该游标可理解为结果集的指针,值是变化的。往下取数据的时候带着游标,就可以获取到下一页的值。如果还有下一页,返回值里依然还有这个字段,直到没有这个字段,说明已经到最后一页。cursor的意义在于数据(真)分页。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90 |}}^**/{org_name}/{app_name}/users**^
需要在请求时对应填写{username},需要获取的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|nickname|昵称(可选),在 iOS Apns 推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,环信是不保存用户昵称,头像等个人信息的,需要自己服务器保存并与给自己用户注册的IM用户名绑定|
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
|notification_display_style|消息提醒方式,“true”仅通知,“false“通知以及消息详情,没有设置则不会返回|
|notification_no_disturbing|免打扰的设置。"0"代表免打扰关闭,“1”免打扰开启,没有设置则不会返回|
|notification_no_disturbing_start|免打扰的开始时间。数字代表开始时间,例如“8”代表每日8:00开启免打扰,没有设置则不会返回|
|notification_no_disturbing_end|免打扰的结束时间。数字代表结束时间,例如“18”代表每日18:00关闭免打扰,没有设置则不会返回|
|notification_ignore_63112447328257|屏蔽/取消屏蔽群组消息的离线推送的设置。数字代表群组id,“true”已屏蔽,“false“未屏蔽,没有设置则不会返回|
|notifier_name|客户端推送证书名称,没有设置则不会返回|
|device_token|推送token,没有则不会返回|
不分页
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMt7CoyjusbEeixOi3iod4eDAAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnJlhJIwBPGgCqtjiyVnR209iyr8kNbhJhhanNQDdP9CMmpK2G-NIUOQ' 'http://a1.easemob.com/easemob-demo/testapp/users?limit=2'
使用返回的cursor获取下一页
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMt7CoyjusbEeixOi3iod4eDAAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnJlhJIwBPGgCqtjiyVnR209iyr8kNbhJhhanNQDdP9CMmpK2G-NIUOQ' 'http://a1.easemob.com/easemob-demo/testapp/users?limit=2&cursor=LTgzNDAxMjM3OToxTEFnNE9sNEVlaVQ0UEdhdmJNR2tB'
=== 可能返回的结果示例 ===
**返回值200,表示获取用户信息成功**
{
"action": "get",
"params": {
"limit": [
"2"
]
},
"path": "/users",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "ab90eff0-e978-11e8-9174-8f161649a182",
"type": "user",
"created": 1542356511855,
"modified": 1542356511855,
"username": "user1",
"activated": true,
"nickname": "user1"
},
{
"uuid": "b2aade90-e978-11e8-a974-f3368f82e4f1",
"type": "user",
"created": 1542356523769,
"modified": 1542356523769,
"username": "user2",
"activated": true,
"nickname": "user2"
}
],
"timestamp": 1542558467056,
"duration": 11,
"cursor": "LTgzNDAxMjM3OToxTEFnNE9sNEVlaVQ0UEdhdmJNR2tB",
"count": 2
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542559172189,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
> 分页
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMt7CoyjusbEeixOi3iod4eDAAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnJlhJIwBPGgCqtjiyVnR209iyr8kNbhJhhanNQDdP9CMmpK2G-NIUOQ' 'http://a1.easemob.com/easemob-demo/testapp/users?limit=2&cursor=LTgzNDAxMjM3OToxTEFnNE9sNEVlaVQ0UEdhdmJNR2tB'
=== 可能返回的结果示例 ===
**返回值200,表示获取用户信息成功**
{
"action": "get",
"params": {
"cursor": [
"LTgzNDAxMjM3OToxTEFnNE9sNEVlaVQ0UEdhdmJNR2tB"
],
"limit": [
"2"
]
},
"path": "/users",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "fef7f250-e983-11e8-ba39-0fed7dcc3cdd",
"type": "user",
"created": 1542361376245,
"modified": 1542361376245,
"username": "testuser",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542559337702,
"duration": 2,
"count": 1
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542559373319,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 删除单个用户 ====
删除一个用户,如果此用户是群组或者聊天室的群主owner,系统会同时删除这些群组和聊天室。请在操作时进行确认。
=== HTTP Request ===
^{{:im:server:ready:delete.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}**^
需要在请求时对应填写{username},需要删除的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== 请求示例 ===
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer YWMt7CoyjusbEeixOi3iod4eDAAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnJlhJIwBPGgCqtjiyVnR209iyr8kNbhJhhanNQDdP9CMmpK2G-NIUOQ' 'http://a1.easemob.com/easemob-demo/testapp/users/user1'
=== 可能返回的结果示例 ===
**返回值200,表示用户删除成功**
{
"action": "delete",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "ab90eff0-e978-11e8-9174-8f161649a182",
"type": "user",
"created": 1542356511855,
"modified": 1542356511855,
"username": "user1",
"activated": true,
"nickname": "user1"
}
],
"timestamp": 1542559539776,
"duration": 39,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值404,表示该用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542559595134,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "service_resource_not_found",
"timestamp": 1542559595134,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 批量删除用户 ====
删除某个 APP 下指定数量的环信账号。可一次删除 N 个用户,数值可以修改。建议这个数值在100-500之间,不要过大。需要注意的是,这里只是批量的一次性删除掉 N个用户,具体删除哪些并没有指定,可以在返回值中查看到哪些用户被删除掉了。
=== HTTP Request ===
^{{:im:server:ready:delete.png?nolink&90|}}^**/{org_name}/{app_name}/users**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== 请求示例 ===
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users?limit=2'
=== 可能返回的结果示例 ===
**返回值200,表示用户删除成功**
{
"action": "delete",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"params": {
"limit": [
"2"
]
},
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "b2aade90-e978-11e8-a974-f3368f82e4f1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
},
{
"uuid": "b98ad170-e978-11e8-8fce-7f76daa76557",
"type": "user",
"created": 1542356535303,
"modified": 1542356535303,
"username": "user3",
"activated": true,
"nickname": "user3"
}
],
"timestamp": 1542867197779,
"duration": 504,
"organization": "easemob-demo",
"applicationName": "testapp",
"cursor": "LTgzNDAxMjM3OTpfdmZ5VU9tREVlaTZPUV90ZmN3ODNR"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542867266449,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:delete:8be024f0-e978-11e8-b697-5d598d5f8402:/users]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 修改用户密码 ====
可以通过服务端接口修改 IM 用户的登录密码,不需要提供原密码。
=== HTTP Request ===
^{{:im:server:ready:put.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/password**^
需要在请求时对应填写{username},需要修改密码的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|newpassword|${新密码指定的字符串}|
=== 请求示例 ===
curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -d '{
"newpassword": "123"
}' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/password'
=== 可能返回的结果示例 ===
**返回值200,表示用户密码修改成功**
{
"action": "set user password",
"timestamp": 1542595598924,
"duration": 8
}
**返回值404,表示该用户不存在**
{
"error": "entity_not_found",
"timestamp": 1542595648340,
"duration": 0,
"exception": "org.apache.usergrid.persistence.exceptions.EntityNotFoundException",
"error_description": "User null not found"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 设置推送昵称 ====
设置用户的推送昵称,在离线推送时使用。
=== HTTP Request ===
^{{:im:server:ready:put.png?nolink&90|}}^** /{org_name}/{app_name}/users/{username}**^
需要在请求时对应填写{username},需要修改推送昵称的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|nickname|将要改成的推送昵称信息|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|nickname|昵称(可选),在离线推送时会使用的昵称(仅在推送通知栏内显示的昵称),并不是用户个人信息的昵称,环信是不保存用户昵称,头像等个人信息的,需要自己服务器保存并与给自己用户注册的IM用户名绑定|
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
=== 请求示例 ===
curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -d '{
"nickname": "testuser"
}' 'http://a1.easemob.com/easemob-demo/testapp/users/user1'
=== 可能返回的结果示例 ===
**返回值200,表示用户推送昵称修改成功**
{
"action": "put",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users",
"entities": [
{
"uuid": "4759aa70-eba5-11e8-925f-6fa0510823ba",
"type": "user",
"created": 1542595573399,
"modified": 1542596083687,
"username": "user1",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542596083685,
"duration": 6,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值400,表示该用户不存在**
{
"error": "required_property_not_found",
"timestamp": 1542597341919,
"duration": 0,
"exception": "org.apache.usergrid.persistence.exceptions.RequiredPropertyNotFoundException",
"error_description": "Entity user requires a property named username"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542597533232,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:put:8be024f0-e978-11e8-b697-5d598d5f8402:/users]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 设置推送消息展示方式 ====
设置推送消息至客户端的方式,修改后及时有效。服务端对应不同的设置,向用户发送不同展示方式的消息。
=== HTTP Request ===
^{{:im:server:ready:put.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}**^
需要在请求时对应填写{username},需要推送的 IM 用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|notification_display_style|“0”仅通知,“1“通知以及消息详情|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
|notification_display_style|消息提醒方式,“0”仅通知,“1“通知以及消息详情|
=== 请求示例 ===
curl -X PUT -H "Authorization: Bearer YWMtSozP9jHNEeSQegV9EKeAQAAAUlmBR2bTGr-GP2xNh8GhUCdKViBFDSEF2E" -i https://a1.easemob.com/easemob-demo/testapp/users/a -d '{"notification_display_style": "1"}'
=== 可能返回的结果示例 ===
**返回值200,表示修改成功**
{
"action" : "put",
"application" : "17d59e50-0aee-11e8-8092-0dc80c0f5e99",
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/testapp/users",
"entities" : [ {
"uuid" : "3b8c9890-7b9a-11e8-9d88-f50bf55cafad",
"type" : "user",
"created" : 1530276298905,
"modified" : 1534407146060,
"username" : "user1",
"activated" : true,
"notification_no_disturbing" : false,
"notification_no_disturbing_start" : 1,
"notification_no_disturbing_end" : 3,
"notification_display_style" : 1,
"nickname" : "testuser",
"notifier_name" : "2882303761517426801"
} ],
"timestamp" : 1534407146058,
"duration" : 3,
"organization" : "1112171214115068",
"applicationName" : "testapp"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 设置免打扰 ====
设置 IM 用户免打扰,在免打扰期间,用户将不会收到离线消息推送。
=== HTTP Request ===
^{{:im:server:ready:put.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}**^
需要在请求时对应填写{username},需要设置免打扰的 IM 用户名
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|notification_no_disturbing|是否免打扰,false 代表免打扰关闭,true 免打扰开启|
|notification_no_disturbing_start|免打扰起始时间,单位是小时|
|notification_no_disturbing_end|免打扰结束时间,单位是小时|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
|notification_display_style|免打扰的设置。"0"代表免打扰关闭,“1”免打扰开启|
|notification_no_disturbing_start|免打扰的开始时间。数字代表开始时间,例如“8”代表每日8:00开启免打扰|
|notification_no_disturbing_end|免打扰的结束时间。数字代表结束时间,例如“18”代表每日18:00关闭免打扰|
=== 请求示例 ===
**设置免打扰时间**
curl -X PUT -H "Authorization: Bearer YWMtSozP9jHNEeSQegV9EKeAQAAAUlmBR2bTGr-GP2xNh8GhUCdKViBFDSEF2E" -i "https://a1.easemob.com/easemob-demo/testapp/users/a " -d '{"notification_no_disturbing": true,"notification_no_disturbing_start": "1","notification_no_disturbing_end": "3"}'
**取消免打扰**
curl -X PUT -H "Authorization: Bearer YWMtSozP9jHNEeSQegV9EKeAQAAAUlmBR2bTGr-GP2xNh8GhUCdKViBFDSEF2E" -i "https://a1.easemob.com/easemob-demo/testapp/users/a " -d '{"notification_no_disturbing": false}'
=== 可能返回的结果示例 ===
**返回值200,表示设置成功**
{
"action" : "put",
"application" : "17d59e50-0aee-11e8-8092-0dc80c0f5e99",
"path" : "/users",
"uri" : "https://a1.easemob.com/easemob-demo/testapp/users",
"entities" : [ {
"uuid" : "3b8c9890-7b9a-11e8-9d88-f50bf55cafad",
"type" : "user",
"created" : 1530276298905,
"modified" : 1534405429835,
"username" : "User1",
"activated" : true,
"notification_no_disturbing" : true,
"notification_no_disturbing_start" : 1,
"notification_no_disturbing_end" : 3,
"notification_display_style" : 0,
"nickname" : "testuser",
"notifier_name" : "2882303761517426801"
} ],
"timestamp" : 1534405429833,
"duration" : 4,
"organization" : "1112171214115068",
"applicationName" : "testapp"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
===== 好友与黑名单 =====
环信提供多个接口实现对 IM 用户的好友以及黑名单进行添加和移除。
^名称^请求^描述^
|添加好友|/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}|添加为好友|
|移除好友|/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}|移除好友列表中的用户|
|获取好友列表|/{org_name}/{app_name}/users/{owner_username}/contacts/users|获取好友列表以及信息|
|获取黑名单|/{org_name}/{app_name}/users/{owner_username}/blocks/users|获取黑名单以及信息|
|添加黑名单|/{org_name}/{app_name}/users/{owner_username}/blocks/users|拉黑用户,添加至黑名单|
|移除黑名单|/{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username}|除黑名单中的用户|
==== 添加好友 ====
添加好友,好友必须是和自己在一个 APPkey 下的 IM 用户,单用户ID可以添加的好友数量,请参考不同版本[[http://www.easemob.com/pricing/im|数量]]
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}**^
需要在请求时对应填写{owner_username},要添加好友的用户名,以及{friend_username},好友用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/contacts/users/user2'
=== 可能返回的结果示例 ===
**返回值200,表示添加好友成功**
{
"action": "post",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users/4759aa70-eba5-11e8-925f-6fa0510823ba/contacts",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users/4759aa70-eba5-11e8-925f-6fa0510823ba/contacts",
"entities": [
{
"uuid": "b2aade90-e978-11e8-a974-f3368f82e4f1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542598913819,
"duration": 63,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值404,表示此IM用户或被添加的好友不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542598965722,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,未授权[无token、token错误、token过期]**
{
"error": "auth_bad_access_token",
"timestamp": 1542599042628,
"duration": 0,
"exception": "org.apache.usergrid.rest.exceptions.SecurityException",
"error_description": "Unable to authenticate due to corrupt access token"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 移除好友 ====
从 IM 用户的好友列表中移除一个 IM 用户。
=== HTTP Request ===
^{{:im:server:ready:delete.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}**^
需要在请求时对应填写{owner_username},要删除好友的用户名,以及{friend_username},被删除好友的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== 请求示例 ===
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/contacts/users/user2'
=== 可能返回的结果示例 ===
**返回值200,表示好友删除成功**
{
"action": "delete",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users/4759aa70-eba5-11e8-925f-6fa0510823ba/contacts",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users/4759aa70-eba5-11e8-925f-6fa0510823ba/contacts",
"entities": [
{
"uuid": "b2aade90-e978-11e8-a974-f3368f82e4f1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542599266616,
"duration": 350,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值404,表示此IM用户或被删除的好友不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542599413796,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542599447198,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:delete:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 获取好友列表 ====
获取 IM 用户的好友列表。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/contacts/users**^
需要在请求时对应填写{owner_username},获取好友列表的用户名
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
^参数^说明^
|username|“user1”, “user2”,获取到的好友列表|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/contacts/users'
=== 可能返回的结果示例 ===
**返回值200,表示查看好友成功**
{
"action": "get",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1/contacts/users",
"entities": [],
"data": [
"user3",
"user2"
],
"timestamp": 1543819826513,
"duration": 12,
"count": 2
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542599741965,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542599778401,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 获取黑名单 ====
获取 IM 用户的黑名单。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/blocks/users**^
需要在请求时对应填写{owner_username},获取黑名单的用户名
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
^参数^说明^
|username|“user1”, “user2”,获取到的黑名单列表|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/blocks/users'
=== 可能返回的结果示例 ===
**返回值200,表示查看用户黑名单成功**
{
"action": "get",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1/blocks/users",
"entities": [],
"data": [
"user2"
],
"timestamp": 1542599978751,
"duration": 4,
"count": 1
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542600037889,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542600068826,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 添加黑名单 ====
向 IM 用户的黑名单列表中添加一个或者多个用户,黑名单中的用户无法给该 IM 用户发送消息,每个用户的黑名单人数上限为500。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/blocks/users**^
需要在请求时对应填写{owner_username},要添加黑名单的用户名
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|usernames|“user1”, “user2”,需要加入到黑名单中的用户名以数组方式提交|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|username|这里会把已添加至内名单的用户名进行展示|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -d '{
"usernames": [
"user2"
]
}' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/blocks/users'
=== 可能返回的结果示例 ===
**返回值200,表示添加黑名单成功**
{
"action": "post",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"uri": "https://a1.easemob.com/easemob-demo/testapp",
"entities": [],
"data": [
"user2"
],
"timestamp": 1542600372046,
"duration": 11,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542600419231,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值400,表示被添加的用户不存在**
{
"error": "illegal_argument",
"timestamp": 1542600449246,
"duration": 0,
"exception": "java.lang.IllegalArgumentException",
"error_description": "attempt to adding new block[user20] for user[user1],but user[user20] not found."
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542600528822,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:post:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 移除黑名单 ====
从 IM 用户的黑名单中移除用户。将用户从黑名单移除后,恢复到好友,或者未添加好友的用户关系。可以正常的进行消息收发。
=== HTTP Request ===
^{{:im:server:ready:delete.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username}**^
需要在请求时对应填写{owner_username},要移除黑名单的用户名
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
^参数^说明^
|entities|从黑名单中移除的 IM 用户的详细信息|
=== 请求示例 ===
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/blocks/users/user2'
=== 可能返回的结果示例 ===
**返回值200,表示移出黑名单成功**
{
"action": "delete",
"application": "8be024f0-e978-11e8-b697-5d598d5f8402",
"path": "/users/4759aa70-eba5-11e8-925f-6fa0510823ba/blocks",
"uri": "https://a1.easemob.com/easemob-demo/testapp/users/4759aa70-eba5-11e8-925f-6fa0510823ba/blocks",
"entities": [
{
"uuid": "b2aade90-e978-11e8-a974-f3368f82e4f1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542600712985,
"duration": 20,
"organization": "easemob-demo",
"applicationName": "testapp"
}
**返回值404,表示此IM用户或被减的用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542600858000,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542600910575,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:delete:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
=====在线与离线=====
环信提供多个接口,可以查看用户的在线/离线状态,用户的消息的在线/离线状态和数量。
^名称^请求^描述^
|获取用户在线状态|/{org_name}/{app_name}/users/{username}/status|查看一个用户的在线状态|
|批量获取用户在线状态|/{org_name}/{app_name}/users/batch/status|批量查看用户的在线状态|
|获取离线消息数|/{org_name}/{app_name}/users/{owner_username}/offline_msg_count|获取一个 IM 用户的离线消息数 |
|获取离线消息的状态|/{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id}|通过离线消息的 ID 查看用户的该条离线消息状态|
==== 获取用户在线状态 ====
查看一个用户的在线状态。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/status**^
需要在请求时对应填写{username},要获取在线状态的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|username|会显示为“user1”对应就是查询的username,“offline”代表离线,“online”在表用户当前在线|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/status'
=== 可能返回的结果示例 ===
**返回值200,表示查询用户状态成功**
{
"action": "get",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1/status",
"entities": [],
"data": {
"user1": "offline"
},
"timestamp": 1542601284531,
"duration": 4,
"count": 0
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542601345042,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542601375113,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 批量获取用户在线状态 ====
批量查看用户的在线状态,最大同时查看100个用户。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90|}}^**/{org_name}/{app_name}/users/batch/status**^
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Request Body ===
^参数^说明^
|usernames|“user1”, “user2”,需要查询状态的用户名以数组方式提交,最多不能超过100个|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|username|会显示为“user1”对应就是查询的username,“offline”代表离线,“online”在表用户当前在线|
=== 请求示例 ===
curl -X POST http://a1.easemob.com/easemob-demo/chatdemoui/users/batch/status -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' -d '{"usernames":["user1","user2"]}'
=== 可能返回的结果示例 ===
**返回值200,表示查询用户状态成功**
如果请求输入错误的用户名,即请求不存在的用户状态,则返回的参数一定是offline,此接口不对用户名进行校验。
{
"action": "get batch user status",
"data": [
{
"user1": "offline"
},
{
"user2": "offline"
}
],
"timestamp": 1552280231926,
"duration": 4
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542601375113,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试;或者或者请求的用户数大于100,请重新发送正确数量的请求。详见[[im:server:help:restastrict|接口限流说明]]
----
==== 获取用户离线消息数 ====
获取 IM 用户的离线消息数量。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{owner_username}/offline_msg_count**^
需要在请求时对应填写{owner_username},要获取离线消息数的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|username|会显示为“user1”对应就是查询的username,“数字”当前离线消息的数量|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/offline_msg_count'
=== 可能返回的结果示例 ===
**返回值200,表示查询离线消息数成功**
{
"action": "get",
"uri": "http://tomcatcluster_users/easemob-demo/testapp/users/user1/offline_msg_count",
"entities": [],
"data": {
"user1": 0
},
"timestamp": 1542601518137,
"duration": 3,
"count": 0
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542601576537,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542601604510,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 获取某条离线消息状态 ====
获取 IM 用户的离线消息状态,查看用户的离线消息离线消息的状态
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id}**^
需要在请求时对应填写{username},要获取离线消息状态的用户名。{msg_id},要查看离线消息状态的ID。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|msg_id|"对应的ID编号",表示为对应的消息id, "delivered"表示状态为消息已投递,"undelivered"表示消息未投递|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/offline_msg_status/123'
=== 可能返回的结果示例 ===
**返回值200,表示查询离线消息状态成功**
{
"action": "get",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1/offline_msg_status/123",
"entities": [],
"data": {
"123": "delivered"
},
"timestamp": 1542601830084,
"duration": 5,
"count": 0
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542601878917,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542601903781,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
=====账号禁用与解禁=====
环信提供了对 IM 用户的禁用以及解禁接口操作,对用户禁用用户将立即下线并无法登录进入环信,直到被解禁后才能恢复登录。常用在对异常用户的即时处理场景使用。
^名称^请求^描述^
|用户账号禁用|/{org_name}/{app_name}/users/{username}/deactivate|禁用用户的登录账号,必须通过解禁才能恢复|
|用户账号解禁| /{org_name}/{app_name}/users/{username}/activate|解禁后用户恢复正常使用|
==== 用户账号禁用 ====
禁用某个 IM 用户的账号,禁用后该用户不可登录,下次解禁后该账户恢复正常使用。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/deactivate**^
需要在请求时对应填写{username},要禁用的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看entities字段包含的信息
^参数^说明^
|uuid|用户的UUID,标识字段|
|type|"user"用户类型|
|username|用户名,也就是环信 ID |
|activated|用户是否已激活,“true”已激活,“false“封禁,封禁需要通过解禁接口进行解禁,才能正常登录|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/deactivate'
=== 可能返回的结果示例 ===
**返回值200,表示禁用用户账号成功**
{
"action": "Deactivate user",
"entities": [
{
"uuid": "4759aa70-eba5-11e8-925f-6fa0510823ba",
"type": "user",
"created": 1542595573399,
"modified": 1542597578147,
"username": "user1",
"activated": false,
"nickname": "user"
}
],
"timestamp": 1542602157258,
"duration": 12
}
**返回值400,表示此IM用户不存在**
{
"error": "management",
"timestamp": 1542602213887,
"duration": 0,
"exception": "org.apache.usergrid.management.exceptions.ManagementException",
"error_description": "User with id null does not exist in app 8be024f0-e978-11e8-b697-5d598d5f8402"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542602239851,
"duration": 0,
"exception": "org.apache.usergrid.rest.exceptions.SecurityException",
"error_description": "No admin user access authorized"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
==== 用户账号解禁 ====
解除 IM 用户账号的禁用操作,由禁用到解禁操作后,需要用户重新登录。
=== HTTP Request ===
^{{:im:server:ready:post.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/activate**^
需要在请求时对应填写{username},要解禁的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
^参数^说明^
|action|操作,“activate user"表示解禁/激活 IM 用户|
=== 请求示例 ===
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/activate'
=== 可能返回的结果示例 ===
**返回值200,表示用户账号解禁成功**
{
"action": "activate user",
"timestamp": 1542602404132,
"duration": 9
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542602447129,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542602487688,
"duration": 0,
"exception": "org.apache.usergrid.rest.exceptions.SecurityException",
"error_description": "No admin user access authorized"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
===== 强制下线 =====
强制 IM 用户状态改为离线,用户需要重新登录才能正常使用。
=== HTTP Request ===
^{{:im:server:ready:get.png?nolink&90|}}^**/{org_name}/{app_name}/users/{username}/disconnect**^
需要在请求时对应填写{username},要强制下线的用户名。
=== Request Headers ===
^参数^说明^
|Content-Type|application/json|
|Authorization|Bearer ${token}|
=== Response Body ===
在返回值中查看data字段包含的信息
^参数^说明^
|result|操作结果,“true"表示用户已经被强制下线|
=== 请求示例 ===
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' 'http://a1.easemob.com/easemob-demo/testapp/users/user1/disconnect'
=== 可能返回的结果示例 ===
**返回值200,表示强制用户下线成功**
{
"action": "get",
"uri": "http://a1.easemob.com/easemob-demo/testapp/users/user1/disconnect",
"entities": [],
"data": {
"result": true
},
"timestamp": 1542602601332,
"duration": 6,
"count": 0
}
**返回值404,表示此IM用户不存在**
{
"error": "service_resource_not_found",
"timestamp": 1542602640827,
"duration": 0,
"exception": "org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException",
"error_description": "Service resource not found"
}
**返回值401,表示未授权[无token、token错误、token过期]**
{
"error": "unauthorized",
"timestamp": 1542602666575,
"duration": 0,
"exception": "org.apache.shiro.authz.UnauthorizedException",
"error_description": "Subject does not have permission [applications:get:8be024f0-e978-11e8-b697-5d598d5f8402:/users/4759aa70-eba5-11e8-925f-6fa0510823ba]"
}
如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:server:help:restastrict|接口限流说明]]
[[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]]
----
上一页:[[im:server:ready:releasenote|版本更新]]
下一页:[[im:server:basics:messages|发送消息]]