====== 服务器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|联系我们]]。