本文介绍如何进行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;
}