全部产品
云市场

认证与连接

更新时间:2018-12-22 20:59:35

本文介绍如何进行 SDK 初始化,建立设备与云端的连接。

设备认证

设备的身份认证支持两种方法,不同方法需填写不同信息。

  • 若使用一机一密认证方式,需要有ProductKey、DeviceName和DeviceSecret。
  • 若使用一型一密认证方式,需要有ProductKey、ProductSecret和DeviceName,并在控制台开启动态注册。

注:本期暂时不支持 “一型一密” 的认证方式。

SDK 初始化

SDK初始化时,会初始化跟云端的Mqtt长连接通道。初始化之前请检查网络情况,如果未连接网络请提示用户先连接网络。

请注意初始化时的 ‘resultBlock’ 回调成功并不代表Mqtt长连接通道建立成功,Mqtt长连接通道连接是否成功请先调用此方法 ‘[[LinkKitEntry sharedKit] registerChannelListener:self];’,根据注册成功的 listener的[onConnectStateChange:state:] 回调方法来判断通道连接情况。

  1. #import <IotLinkKit/IotLinkKit.h>
  2. //初始化前请先注册listener侦听长连接通道的连接状态变化
  3. [[LinkKitEntry sharedKit] registerChannelListener:self];
  4. ////输入设备三元组信息
  5. self.productKey = self.textFieldProductKey.text ;
  6. self.deviceName = self.textFieldDeviceName.text ;
  7. self.deviceSecret = self.textFieldDeviceSecret.text;
  8. LinkkitChannelConfig * channelConfig = [[LinkkitChannelConfig alloc] init];
  9. channelConfig.productKey = self.productKey;
  10. channelConfig.deviceName = self.deviceName;
  11. channelConfig.deviceSecret = self.deviceSecret;
  12. channelConfig.cleanSession = (self.cleanSession == 1);
  13. //channelConfig.server = @"your custom server url";//不设置server,表示使用默认的server地址
  14. //channelConfig.port = 1883;
  15. LinkkitSetupParams * setupParams = [[LinkkitSetupParams alloc] init];
  16. setupParams.appVersion = self.appVersion;
  17. setupParams.channelConfig = channelConfig;
  18. [[LinkKitEntry sharedKit] setup:setupParams resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
  19. LinkkitLogDebug(@"setup error : %@", error);
  20. dispatch_async(dispatch_get_main_queue(), ^{
  21. [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 初始化 : %@",
  22. succeeded ? @"成功" : @"失败"]];
  23. });
  24. }];

SDK 反初始化

反初始化时,会断开跟云端的Mqtt长连接。如果需要注销初始化,调用如下接口。

  1. [[LinkKitEntry sharedKit] destroy:^(BOOL succeeded, NSError * _Nullable error) {
  2. LinkkitLogDebug(@"kit destroy error : %@", error);
  3. dispatch_async(dispatch_get_main_queue(), ^{
  4. [self ims_showHUDWithMessage:[NSString stringWithFormat:@"Linkkit 去初始化 : %@",
  5. succeeded ? @"成功" : @"失败"]];
  6. });
  7. }];

其他设置

日志开关

打开SDK内部日志输出开关:

  1. #import <IMSLog/IMSLog.h>
  2. NSString * const IMS_DEMO_TAG = @"LinkkitDemo";
  3. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  4. // 添加以下代码打开 SDK 的控制台Log
  5. [IMSLog setAllTagsLevel:IMSLogLevelAll];
  6. //创建日志面板助手,注入到日志框架
  7. //[IMSLog addAssistant:[[IMSDashboardLogAssistant alloc] init]];
  8. //设置在控制台显示日志
  9. [IMSLog showInConsole:YES];
  10. //设置 Demo 的日志 tag
  11. [IMSLog registerTag:IMS_DEMO_TAG];
  12. return YES;
  13. }

Mqtt长连接通道状态变化 listener

实现示例代码如下:

  1. - (void)onConnectStateChange:(nonnull NSString *)connectId state:(LinkkitChannelConnectState)state {
  2. NSString * connectTip = nil;
  3. if (state == LinkkitChannelStateConnected) {
  4. connectTip = @"已连接";
  5. } else if (state == LinkkitChannelStateDisconnected) {
  6. connectTip = @"未连接";
  7. } else {
  8. connectTip = @"连接中";
  9. }
  10. dispatch_async(dispatch_get_main_queue(), ^{
  11. self.labelConnectState.text = connectTip;
  12. });
  13. }
  14. - (void)onNotify:(nonnull NSString *)connectId topic:(nonnull NSString *)topic data:(id _Nullable)data {
  15. NSString * downData = [NSString stringWithFormat:@"收到下推,topic : %@ \r\n", topic];
  16. downData = [downData stringByAppendingString:[NSString stringWithFormat:@"\r\n数据 : %@", data]];
  17. LinkkitLogDebug(@"kit recv topic : %@", topic);
  18. dispatch_async(dispatch_get_main_queue(), ^{
  19. self.textViewDownData.text = downData;
  20. });
  21. }
  22. - (BOOL)shouldHandle:(nonnull NSString *)connectId
  23. topic:(nonnull NSString *)topic {
  24. return YES;
  25. }

Mqtt长连接通道服务器域名

域名格式如下${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com\${YourProductKey}请替换为您的产品key。\${YourRegionId}请参考地域和可用区替换为您的Region ID。

  • MQTT域名设置SDK初始化的时候添加以下设置。

    1. channelConfig.server = @"your custom server url";
    2. channelConfig.port = 1883;

说明:如果在初始化时server置为nil,则SDK会使用默认的域名进行连接,中国大陆的用户请使用默认域名。