本文介紹如何進行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;
}
文檔內容是否對您有幫助?