基于MQTT Topic通信

iOS SDK提供了与云端MQTT长连接的基础能力接口,用户可以直接使用这些接口完成自定义Topic相关的功能。SDK中接口提供的基础能力包括:发布、订阅、取消订阅、订阅下行,通过这部分接口可以实现云端数据的上下行。

上行接口请求

重要

本文介绍的接口都需要在MQTT长连接通道建立成功的情况下才可以调用。

调用上行请求接口,SDK封装了上行发布相关接口。使用方法示例如下:

说明

关于QoS取值,目前阿里云物联网平台只支持QoS取值为[0,1],不支持QoS=2。 IoT云端对于数据上下行有限流,请参见使用限制

    NSString * topic = self.textFieldPubTopic.text;
    NSString * content = self.textViewPubContent.text;
    NSInteger iQos = [self.textFieldQos.text integerValue];//qos = 0 or 1

    [[LinkKitEntry sharedKit]   publish:topic
                                data:[content dataUsingEncoding:NSUTF8StringEncoding]
                                 qos:(int)iQos
                         resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
                             LinkkitLogDebug(@"kit publish error : %@", error);
                             dispatch_async(dispatch_get_main_queue(), ^{
                                 [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 上行数据 : %@",
                                                               succeeded ? @"成功" : @"失败"]];
                             });
                         }];
        

订阅与取消订阅

若设备希望从某个Topic接收数据,需要先对该topic进行订阅;如果不再希望接收到来自某个Topic的数据,可以取消对该Topic的订阅。

订阅示例代码:

- (IBAction)onClickSubscribe:(id)sender {
    NSString * topic = self.textFieldSubTopic.text;
    [[LinkKitEntry sharedKit] subscribe:topic
                            resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
                                LinkkitLogDebug(@"kit subscribe error : %@", error);
                                dispatch_async(dispatch_get_main_queue(), ^{
                                    [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 订阅topic : %@,",
                                                                  succeeded ? @"成功" : @"失败"]];
                                });
    }];
}
            

取消订阅示例代码:

- (IBAction)onClickUnsubscribe:(id)sender {

    NSString * topic = self.textFieldSubTopic.text;
    [[LinkKitEntry sharedKit] unsubscribe:topic
                            resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
                                LinkkitLogDebug(@"kit unsubscribe error : %@", error);
                                dispatch_async(dispatch_get_main_queue(), ^{
                                    [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 取消订阅topic : %@,",
                                                                  succeeded ? @"成功" : @"失败"]];
                                });
                            }];
}
            

下行数据监听

订阅Topic成功后,还需要注册listener来监听,SDK才会把此Topic的数据上抛。 注册listener侦听下推数据示例代码,请参见认证与连接