基於MQTT Topic通訊

更新時間:
Copy as MD

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偵聽下推資料範例程式碼,請參見認證與串連