1、阿里云Mqtt消息发送成功回调:
LinkKit.getInstance().publish(request, new IConnectSendListener() {
@Override
public void onResponse(ARequest aRequest, AResponse aResponse) {
// 消息成功提交给操作系统的发送缓冲区。
// 在网络波动等异常情况下,消息可能无法到达云端。
// 如果上行的消息有对应的下行的reply, 建议通过reply报文来确认上行消息的到达。
}
@Override
public void onFailure(ARequest aRequest, AError aError) {
// 发布失败
}
});
成功回调并不是真正意义的发送成功,为确保消息发送成功,使用reply报文实现
2、订阅reply topic
类型:
--订阅的topic列表
--"/sys/${productKey}/${deviceName}/thing/event/property/post_reply", --属性上报回传
--"/sys/${productKey}/${deviceName}/thing/service/property/set", --属性设置
--"/sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post_reply", --事件上报回传
--"/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}", --服务调用
实际订阅:
"/sys/${productKey}/${deviceName}/thing/event/property/post_reply", --属性上报回传
"/sys/%s/%s/thing/service/property/set", --属性设置
"/sys/%s/%s/thing/event/+/post_reply", --事件上报回传
"/sys/%s/%s/thing/service/+_reply", --服务调用
3、事件上报格式
上报格式:
{
"id": "123",
"version": "1.0",
"sys":{
"ack":0
},
"params": {
"value": {
"Power": "on",
"WF": "2"
},
"time": 1524448722000
},
"method": "thing.event.${tsl.event.identifier}.post"
}
reply格式
{
"code": 200,
"data": {
},
"id": "123",
"message": "success",
"method": "thing.event.${tsl.event.identifier}.post",
"version": "1.0"
}
4、订阅接收处理
伪代码实现流程:
1、生成消息id:id(第3点上报格式中的“id”参数)
2、注册该id的回调函数(reply也会返回该id参数,根据id,执行对应函数)
3、上报事件
4、接收事件reply
5、执行回调函数(回调函数处理事件发送成功的后续)