自定义MQTT Topic通信
Android SDK提供与阿里云物联网平台通信的基础能力接口,本文介绍通过自定义Topic实现发布、订阅、取消订阅的基础能力。
发布消息
更多发布消息内容,请参见MqttPublishRequest。
不返回应答
适用于设备上行消息,物联网平台不回复,或者物联网平台进行了回复但设备端不需要做处理的场景。
// 发布
MqttPublishRequest request = new MqttPublishRequest();
// 设置是否需要应答。
request.isRPC = false;
// 设置topic,设备通过该Topic向物联网平台发送消息。
request.topic = /a18wP******/LightSwitch/user/update;
// 设置 qos
request.qos = 0;
// data 设置需要发布的数据 json String,其中ID字段需要保持自增。
//示例 属性上报 {"id":"160865432","method":"thing.event.property.post","params":{"LightSwitch":1},"version":"1.0"}
request.payloadObj = data;
LinkKit.getInstance().publish(request, new IConnectSendListener() {
@Override
public void onResponse(ARequest aRequest, AResponse aResponse) {
// 发布成功
}
@Override
public void onFailure(ARequest aRequest, AError aError) {
// 发布失败
}
});
参数 | 示例 | 说明 |
---|---|---|
isRPC | false | 是否为RPC请求,如果是,则需要等待 replyTopic消息后才Rsp。 默认为false,表示不需应答。 |
topic | /a18wP******/LightSwitch/user/update | 拥有发布权限的Topic。设备通过该Topic向物联网平台发送消息。 |
qos | 0 | 设置MQTT请求中QOS的值,默认为0。 |
payloadObj | {"id":"160865432","method":"thing.event.property.post","params":{"LightSwitch":1},"version":"1.0"} | 需要发布的数据,格式为JSON String。 其中ID字段需要保持每次唯一,不可重复,请使用自增的方式设置ID字段。示例中ID字段为160865432,则下次ID字段应为160865433。 |
返回应答
适用于设备上行消息,物联网平台会予以回复,并且设备端需要做处理下行报文的场景。
// 发布
MqttPublishRequest request = new MqttPublishRequest();
// 设置是否需要应答。设置为true,表示期望收到物联网平台的下行回复。
request.isRPC = true;
// 设置qos
request.qos = 0;
// 设置topic,设备通过该Topic向物联网平台发送消息。
request.topic = /a18wP******/LightSwitch/user/update;
//设置物联网平台答复的topic,若不设置,则默认为 topic+“_reply”。
request.replyTopic = /a18wP******/LightSwitch/user/update_reply;
//示例 属性上报 {"id":"160865432","method":"thing.event.property.post","params":{"LightSwitch":1},"version":"1.0"}
request.payloadObj = data;
//demo的BaseTemplateActivity提供了参考的消息响应的类, 下行消息会在其中的onResponse中给到用户
LinkKit.getInstance().publish(request, new IConnectSendListener() {
@Override
public void onResponse(ARequest aRequest, AResponse aResponse) {
// 发布成功
}
@Override
public void onFailure(ARequest aRequest, AError aError) {
// 发布失败
}
});
参数 | 示例 | 说明 |
---|---|---|
isRPC | true | 是否为RPC请求,如果是,则需要等待 replyTopic消息后才Rsp。 设置为true,表示期望收到物联网平台的下行回复。 |
qos | 0 | 设置MQTT请求中QoS的值,默认为0。 |
topic | /a18wP******/LightSwitch/user/update | 拥有发布权限的Topic。设备通过该Topic向物联网平台发送消息。 |
replyTopic | /a18wP******/LightSwitch/user/update_reply | 设置物联网平台答复的topic,若不设置,则默认为 topic+“_reply”。 |
payloadObj | {"id":"160865432","method":"thing.event.property.post","params":{"LightSwitch":1},"version":"1.0"} | 需要发布的数据,格式为JSON String。 其中ID字段需要保持每次唯一,不可重复,请使用自增的方式设置ID字段。示例中ID字段为160865432,则下次ID字段应为160865433。 物联网平台进行应答时根据该值进行精准匹配。 |
订阅消息
您可以订阅指定Topic的消息,订阅关系将保存在物联网平台。物联网平台收到指定Topic发布的消息后,会将消息转发给设备。更多内容,请参见MqttSubscribeRequest。
如果设备不再需要订阅指定Topic,需要主动取消订阅。否则订阅关系一直存在,您将持续收到订阅Topic发送的消息。具体内容,请参见取消订阅。
示例代码:
// 订阅
MqttSubscribeRequest subscribeRequest = new MqttSubscribeRequest();
// subTopic 替换成您需要订阅的 topic
subscribeRequest.topic = subTopic;
subscribeRequest.isSubscribe = true;
subscribeRequest.qos = 0; // 支持0或者1
LinkKit.getInstance().subscribe(subscribeRequest, new IConnectSubscribeListener() {
@Override
public void onSuccess() {
// 订阅成功
}
@Override
public void onFailure(AError aError) {
// 订阅失败
}
});
取消订阅
// 取消订阅
MqttSubscribeRequest unsubRequest = new MqttSubscribeRequest();
// unSubTopic 替换成您需要取消订阅的topic
unsubRequest.topic = unSubTopic;
unsubRequest.isSubscribe = false;
LinkKit.getInstance().unsubscribe(unsubRequest, new IConnectUnscribeListener() {
@Override
public void onSuccess() {
// 取消订阅成功
}
@Override
public void onFailure(AError aError) {
// 取消订阅失败
}
});