全部产品
Search
文档中心

阿里云物联网平台:认证与连接

更新时间:Jul 07, 2023

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