Android SDK 提供了与云端长链接的基础能力接口,用户可以直接使用这些接口完成自定义 Topic 相关的功能。提供的基础能力包括:发布、订阅、取消订阅。如果不想使用物模型,可以通过这部分接口实现与云端的交互。

发布消息

MqttPublishRequest 类路径参见 com.aliyun.alink.linksdk.cmp.connect.channel.MqttPublishRequest。

// 发布
MqttPublishRequest request = new MqttPublishRequest();
request.isRPC = false;
// topic 替换成用户自己需要发布的 topic
request.topic = topic;
// 设置 qos
request.qos = 0;
// data 替换成用户需要发布的数据 json String
//示例 属性上报 {"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) {
        // 发布失败
    }
});
			

订阅消息

订阅关系保存在云端,设备如果订阅了某个topic,如果未主动执行unsbscribe,订阅关系会一直在。即如果设备重启之后不再订阅这个topic,订阅关系还是在的,云端收到对应topic发布,还是会转发给设备。订阅的topic下推可以在 设置的全局 IConnectNotifyListener 的 onNotify 处理。MqttSubscribeRequest 类路径参见 com.aliyun.alink.linksdk.cmp.connect.channel.MqttSubscribeRequest。

// 订阅
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) {
        // 订阅失败
    }
});
			

取消订阅

可以通过设置qos参数,指定订阅使用qos 0 或 1。

// 取消订阅
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) {
        // 取消订阅失败
    }
});