====== 服务器SDK ======
环信MQTT消息云支持服务器端集成SDK,实现一对多消息发送、获取token、获取客户端连接记录、查询客户端session信息以及查询客户端消息发布&投递记录等功能,本文为服务器端集成MQTT SDK提供对接指导及数据规范。
===== 概览 =====
|函数名称|描述|
|[[mqtt:serversdkdownload#sdk初始化|createClient]]|SDK初始化|
| [[mqtt:serversdkdownload#获取临时访问token|ApplyTokenRequest]]|获取临时访问token|
| [[mqtt:serversdkdownload#发送消息|SendMessage]]|发送消息,向指定topic发送消息,支持同时向多个topic发送消息|
| [[mqtt:serversdkdownload#查询客户端连接记录|QueryMqttRecordDevice]]|查询MQTT客户端连接记录,包括连接动作、订阅、发布、断开连接等记录|
| [[mqtt:serversdkdownload#查询客户端session信息|QuerySessionByClientId]]|查询客户端当前session信息,包括在线状态、最新上线时间、登录用户ID、使用版本、订阅关系等|
| [[mqtt:serversdkdownload#查询客户端消息发送_投递记录|QueryMqttRecordMessageOfClient]]|查询客户端消息发送&投递记录|
| [[mqtt:serversdkdownload#查询指定消息的发送记录|QueryMqttRecordMessagePublish]]|查询指定消息的发送记录|
| [[mqtt:serversdkdownload#查询指定消息的投递记录|QueryMqttRecordMessageSubscribe]]|查询指定消息的投递记录|
===== SDK初始化 =====
|函数名称|createClient()|||
|方法说明|初始化|||
|参数名称|类型|是否必须|说明|
|AppClientId|String|是|开发者Client ID,系统生成,在console【应用概览】->【应用详情】->【开发者ID】下的‘ClientID’获取|
|AppClientSecret|String|是|开发者密钥,在console【应用概览】->【应用详情】->【开发者ID】下的‘ClientSecret’获取|
|RestApi|String|是|REST API地址,在console【MQTT】->【服务概览】->【服务配置】下的‘REST API地址’获取|
|代码示例||||
|
import com.easemob.sdk.Client;
import com.easemob.sdk.Config;
import com.easemob.sdk.api.*;
import com.easemob.sdk.domain.*;
public class Demo {
public static Client createClient() {
Config config = new Config(); // 实例化应用配置类
config.setAppClientId("YZA63eVgbRHDS9-lmYwBje8t2w")
.setAppClientSecret("YZA6BaXcq4l8LN8b6ej7sTXqaEdhBsg")
.setRestApi("https://api.cn1.mqtt.chat/app/vwp0b0");
Client client = new Client(config); // 实例化应用客户端
return client;
}
}
||||
===== 获取临时访问token =====
|函数名称|ApplyTokenRequest()|||
|方法说明|获取临时访问token|||
|参数名称|类型|是否必须|说明|
|Username|String|是|环信账户系统中的用户ID,在【应用概览】→【用户认证】下的用户ID创建与获取;|
|Password|String|是|环信账户系统中的用户密码,在【应用概览】→【用户认证】下的用户ID创建与获取;|
|代码示例||||
|
public static void main(String[] args) {
Client client = createClient(); // 创建应用客户端
/**
* 获取临时访问Token
*/
ApplyTokenRequest applyTokenRequest = new ApplyTokenRequest(); // 创建请求参数类
applyTokenRequest.setUsername("test1"); // 设置请求参数
applyTokenRequest.setPassword("123456"); // 设置请求参数
ResponseOk responseOk = client.applyToken(applyTokenRequest); // 调用应用客户端发起请求
if (responseOk.getCode() == 200) { // 如果返回code为200,请求正常返回
String access_toke = responseOk.getBody().getAccess_token(); // 获取返回对象字段值
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:获取成功;400:获取失败||
|msg|String|success:获取成功;fail:获取失败||
|body|Object|access_token:获取到的token;\\ expires_in:token过期时间;\\ type:token类型; \\ username:用户名;||
===== 发送消息 =====
|函数名称| SendMessage()|||
|方法说明|向指定topic发送消息,支持同时向多个topic发送消息|||
|参数名称|类型|是否必须|说明|
|topics|String[]|是|主题名称数组,最多32个主题|
|Clientid|String|是|服务器端的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|Payload|String|是|消息内容,支持json、xml、raw格式|
|Encoding|String|否|消息体编码方式,支持 plain 与 base64 两种,默认为 plain|
|Qos|Integer|否|QoS等级,默认为0|
|Expire|Integer|否|消息最大保留时间,单位:秒,取值范围:[86400,259200]|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 服务端应用发消息
*/
String[] topics = new String[]{"abc"};
SendMessage sendMessage = new SendMessage();
sendMessage.setClientid("deviceId1@vwp0b0");
sendMessage.setPayload("hello world");
sendMessage.setTopics(topics);
ResponseOk responseOk = client.sendMessage(sendMessage);
if (responseOk.getCode() == 200) {
ChatInfo chatInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:发送成功;400:发送失败||
|msg|String|success:发送成功;fail:发送失败||
|body|Object|mids:消息ID列表,与发送消息顺序对应||
===== 查询客户端连接记录 =====
|函数名称|QueryMqttRecordDevice()|||
|方法说明|查询MQTT客户端连接记录,包括连接动作、订阅、发布、断开连接等记录|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|BeginTime|String|是|查询起始时间|
|EndTime|String|是|查询结束时间|
|CurrentPage|Integer|否|当前页码,默认1|
|PageSize|Integer|否|分页大小,默认10|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 查询MQTT客户端连接记录
*/
QueryMqttRecordDevice queryMqttRecordDevice = new QueryMqttRecordDevice();
queryMqttRecordDevice.setBeginTime("2021-08-10 15:00:00");
queryMqttRecordDevice.setEndTime("2021-08-10 16:00:00");
queryMqttRecordDevice.setCurrentPage(1);
queryMqttRecordDevice.setPageSize(10);
queryMqttRecordDevice.setClientid("deviceId1@vwp0b0");
ResponseOk responseOk = client.queryMqttRecordDevice(queryMqttRecordDevice);
if (responseOk.getCode() == 200) {
DeviceRecordInfo deviceRecordInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:发送成功;400:发送失败||
|msg|String|success:发送成功;fail:发送失败||
|body|Object|totalCount:记录总数;\\ ts:记录发生时间;\\ status:记录状态;\\ reason:记录发生原因;\\ detail:记录详情||
===== 查询客户端session信息 =====
|函数名称| QuerySessionByClientId()|||
|方法说明|查询客户端当前session信息,包括在线状态、最新上线时间、登录用户ID、使用版本、订阅关系等|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|CurrentPage|Integer|否|当前页码,默认1|
|PageSize|Integer|否|分页大小,默认10|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 根据Client ID查询指定客户端当前session连接信息
*/
QuerySessionByClientId querySessionByClientId = new QuerySessionByClientId();
querySessionByClientId.setClientid("deviceId1@vwp0b0");
querySessionByClientId.setCurrentPage(1);
querySessionByClientId.setPageSize(10);
ResponseOk responseOk = client.querySessionByClientId(querySessionByClientId);
if (responseOk.getCode() == 200) {
ClientInfo clientInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:查询成功;400:查询失败||
|msg|String|success:查询成功;fail:查询失败||
|body|Object| status:在线状态,online为在线,offline为离线;\\ time:最新连接时间;\\ user:当前登录使用的用户ID;\\ keepalive:心跳间隔;\\ cleansession:是否清除会话,true:清除,false:不清除;\\ will:是否遗嘱消息,true:是,false:否;\\ version:MQTT版本;\\ pageSize:订阅主题页面大小;\\ currentPage:订阅主题当前页;\\ total:总条数;\\ topic:订阅的主题名称;\\ qos:设置的QoS等级||
===== 查询客户端消息发送&投递记录 =====
|函数名称|QueryMqttRecordMessageOfClient()|||
|方法说明|查询客户端消息发送&投递记录|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|BeginTime|String|是|查询起始时间|
|EndTime|String|是|查询结束时间|
|CurrentPage|Integer|否|当前页码,默认1|
|PageSize|Integer|否|分页大小,默认10|
|Order|String|否|取值:“ASC”升序,“DESC”降序|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 查询客户端消息发送&投递记录
*/
QueryMqttRecordMessageOfClient queryMqttRecordMessageOfClient = new QueryMqttRecordMessageOfClient();
queryMqttRecordMessageOfClient.setClientid("deviceId1@vwp0b0");
queryMqttRecordMessageOfClient.setBeginTime("2021-08-10 15:00:00");
queryMqttRecordMessageOfClient.setEndTime("2021-08-10 16:00:00");
queryMqttRecordMessageOfClient.setCurrentPage(1);
queryMqttRecordMessageOfClient.setPageSize(10);
queryMqttRecordMessageOfClient.setOrder(OrderParams.desc);
ResponseOk responseOk = client.queryMqttRecordMessageOfClient(queryMqttRecordMessageOfClient);
if(responseOk.getCode() == 200) {
MqttMessageInfo mqttMessageInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:查询成功;400:查询失败||
|msg|String|success:查询成功;fail:查询失败||
|body|Object| ts:消息发送/接收时间;\\ mid:消息ID;\\ cid:客户端ID;\\ direction:消息上行/下行,上行:uplink,下行:downlink||
===== 查询指定消息的发送记录 =====
|函数名称|QueryMqttRecordMessagePublish()|||
|方法说明|查询指定消息的发送记录|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|Messageid|String|是|指定的消息ID|
|Order|String|否|取值:“ASC”升序,“DESC”降序|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 查询指定消息的发送记录
*/
QueryMqttRecordMessagePublish queryMqttRecordMessagePublish = new QueryMqttRecordMessagePublish();
queryMqttRecordMessagePublish.setClientid("deviceId1@vwp0b0");
queryMqttRecordMessagePublish.setMessageid("045B93CAB4002000");
queryMqttRecordMessagePublish.setOrder(OrderParams.desc);
ResponseOk responseOk = client.queryMqttRecordMessagePublish(queryMqttRecordMessagePublish);
if (responseOk.getCode() == 200) {
MqttMessageInfo mqttMessageInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:查询成功;400:查询失败||
|msg|String|success:查询成功;fail:查询失败||
|body|Object| ts:消息发送时间;\\ mid:消息ID;\\ cid:发送客户端ID;\\ status:状态;\\ topic:消息发送主题;\\ qos:消息qos等级||
===== 查询指定消息的投递记录 =====
|函数名称| QueryMqttRecordMessageSubscribe()|||
|方法说明|查询指定消息的投递记录|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|Messageid|String|是|指定的消息ID|
|BeginTime|String|是|查询起始时间|
|EndTime|String|是|查询结束时间|
|CurrentPage|Integer|否|当前页码,默认1|
|PageSize|Integer|否|分页大小,默认10|
|Order|String|否|取值:“ASC”升序,“DESC”降序|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 查询指定消息的投递记录
*/
QueryMqttRecordMessageSubscribe queryMqttRecordMessageSubscribe = new QueryMqttRecordMessageSubscribe();
queryMqttRecordMessageSubscribe.setClientid("deviceId1@vwp0b0");
queryMqttRecordMessageSubscribe.setMessageid("045B93CAB4002000");
queryMqttRecordMessageSubscribe.setBeginTime("2021-08-10 15:00:00");
queryMqttRecordMessageSubscribe.setEndTime("2021-08-10 16:00:00");
queryMqttRecordMessageSubscribe.setCurrentPage(1);
queryMqttRecordMessageSubscribe.setPageSize(10);
queryMqttRecordMessageSubscribe.setOrder(OrderParams.desc);
ResponseOk responseOk = client.queryMqttRecordMessageSubscribe(queryMqttRecordMessageSubscribe);
if (responseOk.getCode() == 200) {
MqttMessageInfo mqttMessageInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:查询成功;400:查询失败||
|msg|String|success:查询成功;fail:查询失败||
|body|Object| ts:消息投递时间;\\ cid:接收客户端ID;\\ status:状态;\\ topic:消息投递主题;\\ qos:消息qos等级 ||
===== 查询指定消息的投递内容 =====
|函数名称| QueryMqttRecordMessageSubscribe()|||
|方法说明|查询指定消息的投递记录|||
|参数名称|类型|是否必须|说明|
|Clientid|String|是|待查询的Clientid,由“{deviceID}@{AppID}”组成,其中{deviceID}由用户自定义,{AppID}在console后台的 \\ 【MQTT】→ 【服务概览】→【服务配置】下的‘AppID’获取|
|Messageid|String|是|指定的消息ID|
|BeginTime|String|是|查询起始时间|
|EndTime|String|是|查询结束时间|
|CurrentPage|Integer|否|当前页码,默认1|
|PageSize|Integer|否|分页大小,默认10|
|Order|String|否|取值:“ASC”升序,“DESC”降序|
|代码示例||||
|
public static void main(String[] args) throws Exception {
Client client = createClient();
/**
* 查询指定消息的投递记录
*/
QueryMqttRecordMessageSubscribe queryMqttRecordMessageSubscribe = new QueryMqttRecordMessageSubscribe();
queryMqttRecordMessageSubscribe.setClientid("deviceId1@vwp0b0");
queryMqttRecordMessageSubscribe.setMessageid("045B93CAB4002000");
queryMqttRecordMessageSubscribe.setBeginTime("2021-08-10 15:00:00");
queryMqttRecordMessageSubscribe.setEndTime("2021-08-10 16:00:00");
queryMqttRecordMessageSubscribe.setCurrentPage(1);
queryMqttRecordMessageSubscribe.setPageSize(10);
queryMqttRecordMessageSubscribe.setOrder(OrderParams.desc);
ResponseOk responseOk = client.queryMqttRecordMessageSubscribe(queryMqttRecordMessageSubscribe);
if (responseOk.getCode() == 200) {
MqttMessageInfo mqttMessageInfo = responseOk.getBody();
}
}
||||
|返回参数|类型|说明||
|code|Integer|200:查询成功;400:查询失败||
|msg|String|success:查询成功;fail:查询失败||
|body|Object| ts:消息投递时间;\\ cid:接收客户端ID;\\ status:状态;\\ topic:消息投递主题;\\ qos:消息qos等级 ||
====== 服务器SDK下载 ======
* 完整SDK下载,请参见[[https://github.com/easemob/easemob-mqtt-server-sdk|服务器SDK下载]]。
* 如果您在使用MQTT服务中,有任何疑问和建议,欢迎您[[http://docs-im.easemob.com/playground/message/msgcontact|联系我们]]。