全部產品
Search
文件中心

:認證與串連

更新時間:Jun 30, 2024

本文介紹如何進行iOS Link SDK初始化,建立裝置與物聯網平台的串連。

背景資訊

iOS Link SDK僅支援一機一密的裝置認證方式。更多資訊,請參見一機一密

初始化SDK

範例程式碼:

#import <IotLinkKit/IotLinkKit.h>

    //初始化前請先註冊監聽器,監聽長串連通道的串連狀態變化
    [[LinkKitEntry sharedKit] registerChannelListener:self];

    ////輸入裝置認證資訊
    self.productKey = self.textFieldProductKey.text ;
    self.deviceName = self.textFieldDeviceName.text ;
    self.deviceSecret = self.textFieldDeviceSecret.text;

    LinkkitChannelConfig * channelConfig = [[LinkkitChannelConfig alloc] init];
    channelConfig.productKey = self.productKey;
    channelConfig.deviceName = self.deviceName;
    channelConfig.deviceSecret = self.deviceSecret;
    channelConfig.cleanSession = (self.cleanSession == 1);
    //channelConfig.server = @"your custom server url";
    //channelConfig.port = 1883;
    LinkkitSetupParams * setupParams = [[LinkkitSetupParams alloc] init];
    setupParams.appVersion = self.appVersion;
    setupParams.channelConfig = channelConfig;
    [[LinkKitEntry sharedKit] setup:setupParams resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
        LinkkitLogDebug(@"setup error : %@", error);
        dispatch_async(dispatch_get_main_queue(), ^{
            [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 初始化 : %@",
                                          succeeded ? @"成功" : @"失敗"]];
        });
    }];
            
重要
  • 初始化時的resultBlock回調成功不代表MQTT長串連通道建立成功。

  • 您可調用 [[LinkKitEntry sharedKit] registerChannelListener:self]方法,根據監聽器的[onConnectStateChange:state:]回調方法,來判斷串連是否成功。

相關參數

參數

樣本值

說明

productKey

a18wP******

裝置認證資訊。即完成添加裝置後,您儲存至本地的裝置認證。

您也可以在物聯網平台的裝置詳情頁查看裝置的認證資訊。更多資訊,請參見擷取裝置認證資訊

deviceName

LightSwitch

deviceSecret

uwMTmVAMnGGHaAkqmeDY6cHxxB******

server

a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com

裝置的接入網域名稱。

  • 企業版執行個體和新版公用執行個體:在執行個體詳情頁面的開發配置面板,查看接入網域名稱。

  • 舊版公用執行個體:接入網域名稱格式為${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com

新舊版公用執行個體和企業版執行個體、以及接入網域名稱的更多資訊,請參見查看執行個體終端節點

反初始化SDK

反初始化時,斷開裝置與物聯網平台的MQTT長串連。如果需要登出初始化,調用如下介面。

    [[LinkKitEntry sharedKit] destroy:^(BOOL succeeded, NSError * _Nullable error) {
        LinkkitLogDebug(@"kit destroy error : %@", error);
        dispatch_async(dispatch_get_main_queue(), ^{
            [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 去初始化 : %@",
                                          succeeded ? @"成功" : @"失敗"]];
        });
    }];
            

日誌開關

開啟SDK內部日誌輸出開關:


#import <IMSLog/IMSLog.h>

NSString * const IMS_DEMO_TAG = @"LinkkitDemo";

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 添加以下代碼開啟SDK的控制台日誌
    [IMSLog setAllTagsLevel:IMSLogLevelAll];
    //建立日誌面板助手,注入到日誌架構
    //[IMSLog addAssistant:[[IMSDashboardLogAssistant alloc] init]];
    //設定在控制台顯示日誌
    [IMSLog showInConsole:YES];
    //設定Demo的日誌Tag
    [IMSLog registerTag:IMS_DEMO_TAG];

    return YES;
}
            

MQTT長串連通道狀態變化listener

範例程式碼:

- (void)onConnectStateChange:(nonnull NSString *)connectId state:(LinkkitChannelConnectState)state {
    NSString * connectTip = nil;
    if (state == LinkkitChannelStateConnected) {
        connectTip = @"已串連";
    } else if (state == LinkkitChannelStateDisconnected) {
        connectTip = @"未串連";
    } else {
        connectTip = @"串連中";
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        self.labelConnectState.text = connectTip;
    });
}

- (void)onNotify:(nonnull NSString *)connectId topic:(nonnull NSString *)topic data:(id _Nullable)data {
    NSString * downData = [NSString stringWithFormat:@"收到下推,topic : %@ \r\n", topic];
    downData = [downData stringByAppendingString:[NSString stringWithFormat:@"\r\n資料 : %@", data]];

    LinkkitLogDebug(@"kit recv  topic : %@", topic);

    dispatch_async(dispatch_get_main_queue(), ^{
        self.textViewDownData.text = downData;
    });
}

- (BOOL)shouldHandle:(nonnull NSString *)connectId 
               topic:(nonnull NSString *)topic {
    return YES;
}