本文介紹如何進行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 | 裝置的接入網域名稱。
新舊版公用執行個體和企業版執行個體、以及接入網域名稱的更多資訊,請參見查看執行個體終端節點。 |
反初始化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;
}