Skip to content

iOS SDK开发指南

X-MQTT V6

资源名称链接地址版本号发布时间更新说明文档链接
XLinkSDK_iOS_FULL6.2.0.29I-SDK下载及更新说明FULL.6.2.0.292018-09-20SDK新增logout的方法新增支持的协议类型配置接口,优化数据通讯新增内网自动连接配置接口,默认不开启新增回调线程的设置 新增短信登录任务新增短信登陆的restful接口新增快捷登录任务修正错误的注释描述I-快速开始I-进阶篇I-APII-FAQI-资源下载
XLinkSDKDemo_iOS_FULL.1.1.2.17[iOS Demo](5)I-资源下载/2)iOS Demo.md)FULL.1.1.2.172018-09-20更新V6.2 XLinkSDK。加入协议选择的配置加入是否开启内网自动连接的配置加入服务器地址是否开启SSL的配置。加入服务器SSL的选择。

X-MQTT V5

资源名称链接地址版本号发布时间更新说明文档链接
XLinkSDK_iOS_V5.0iOS SDK (V5) 下载及更新说明5.0.0.379442017-12-27修复发布APP时候,提示bitcode错误的问题;修复接受分享和分享设备时候,出现的错误问题;加入获取SDK版本的接口,[XLinkSDK getXLinkSDKVersion];iOS SDK开发指南
XLinkSDKV5Demo_iOS_V1.0iOS SDK (V5) Demo1.0.0.1562018-1-16更新XLinkSDK加入二维码订阅设备等功能。解决一些第三方库引用失效的问题。根据XLinkSDK的XLinkHttpRequest模块api变更修改了Demo的部分代码

快速开始

一、概述

在此部分主要是介绍如何最快速使用XLinkSDK,包括了以下几部分内容

  • SDK的导入与配置
  • SDK的简单初始化
  • 基本流程任务的使用

通过以下的几个简单的步骤,就可以完成基础的设备连接并控制操作,然后就可以开始体验智能互联的力量了!

更多详细信息和使用请参考进阶篇-SDK高级配置,相关API使用请参考API,常见的问题解答请参考FAQ

1、SDK的导入与配置

方式一、通过 Cocoapods 集成
  1. 在您当前工程的 Podfile 文件中添加如下一行。

    bash
    `pod ``'XLinkSDK'`
  2. 执行pod install 或pod update。

  3. 首次导入的话需要把工程中其中一个导入XLinkSDK.h代码文件的.m后缀修改为.mm后缀。例如在"AppDelegate.m"中导入了XLinkSDK.h,就需要把"AppDelegate.m"改"AppDelegate.mm"。

方式二、手动集成 XLinkSDK
  1. 您可以到XLinkSDK下载地址下载XLinkSDK。
  2. 把下载到 XLinkSDK解压,并把解压后的源文件添加(拖放)到您的工程中。
  3. 导入SDK后,您的工程需要做以下的配置:
    • 进入Build Phases ,点击打开"Link Binary With Library",添加"libz.tbd"。
    • Build Settings --> Linking --> Other Liker Fliags 添加 -ObjC
    • 首次导入的话需要把工程中其中一个导入XLinkSDK.h 代码文件的.m后缀修改为.mm后缀。例如在"AppDelegate.m"中导入了XLinkSDK.h,就需要把"AppDelegate.m"改"AppDelegate.mm"。

2、SDK简单初始化

SDK初始化的参数有相对较多的可选参数,可以根据需要设置使用。这里介绍最简单的初始化过程(使用默认参数初始化使用)。

objective-c
//使用默认参数启动并运行SDK
[[XLinkSDK share] start];

SDK启动后即可进行相关功能使用。

3、基本流程任务使用

SDK中提供了多个模块与功能,以下仅从最常见的使用流程进行基本介绍。最常见的使用流程为:

用户授权->扫描设备->添加订阅设备->设备控制->移除设备(->同步设备列表)
3.1、用户授权

用户授权即用户的登录操作,登陆成功之后SDK会维护和云端的连接,并且维护Access-Token的有效性,该操作需要使用XLinkUserAuthorizeTask。

objective-c
XLinkUserAuthorizeTask *userAuthTask = [XLinkUserAuthorizeTask userAuthorizeTaskWithAccount:account
                             password:password
                             cropId:cropID
                             timeout:20
                   completionHandler:^(id result, NSError *error) {
    if (error) {
        //登录失败
    }else {
        //登录成功,在result中含有授权信息,SDK内部自动进行云端连接
    }
}];
[userAuthTask start];
3.2、扫描设备

扫描设备指的是在局域网中发现所需要的设备,需要使用XLinkScanDeviceTask。扫描设备需要使用到设备的 ProductId,即产品ID,获取方式请参考资源准备。

objective-c
//新建扫描设备任务
XLinkScanDeviceTask *scanTask = [XLinkScanDeviceTask scanDeviceTaskWithProductIdArray:@[@"123456789",@"987654321"]
                                                                              timeout:90
                                                           didDiscoveredDeviceHandler:^(XDevice *device) {
    //扫描到设备回调,同一设备仅会回调一次
}
                                                                    completionHandler:^(id result, NSError *error) {
    //无论搜不搜索到设备都会回调这个方法。返回的错误是任务超时
}];
 
[scanTask start];
3.3、添加订阅设备

添加订阅设备时会通过云端建立当前用户与设备的绑定关系,需要使用XLinkAddDeviceTask。

objective-c
XLinkAddDeviceTask *addDeviceTask = [XLinkAddDeviceTask addDeviceTaskWithDevice:device
                                                                        pinCode:pingCode //pingCode需要硬件设备支持,一般情况下可以为nil
                                                                        timeout:60
                                                              completionHandler:^(id result, NSError *error) {
    if (!error) {
        //设备添加成功
    }else{
        //设备添加失败
    }
}];
[addDeviceTask start];
3.4、设备控制

设备控制分为三个操作,分别是获取获取设备物模型属性、设置设备物模型属性、以及调用设备物模型服务操作,三个操作分别对应了三个任务。其中设备物模型属性的详细说明可查阅附录,此处可以先理解为获取设备的控制属性。

  • 获取设备物模型属性

对设备的控制实际上就是对设备的物模型属性进行操作,从而达到设备状态或行为变化。其中获取设备物模型属性使用 XLinkTMLProbeAttributeTask

objective-c
XLinkTMLProbeAttributeTask *task = [XLinkTMLProbeAttributeTask probeAttributeTaskWithDevice:device dataPayload:dataPayload timeout:10 completionHandler:^(id  _Nullable result, NSError * _Nullable error) {
    if (!error) {
        //任务执行成功,物模型属性列表会通过result返回
    }else{
        //任务执行失败
    }
}];

//执行查询物模型属性任务
[task start];
  • 设置设备物模型属性

对设备的控制实际上就是对设备的物模型属性进行操作,从而达到设备状态或行为变化。其中设置设备物模型属性使用 XLinkTMLSetAttributeTask

objective-c
//修改物模型属性,控制设备
NSDictionary *dataPayload = @{
    @"v" : @"2",
    @"input" : @{
        @"PowerSwitch" : @(YES),
        @"key2" : @"value2"
    }
};
XLinkTMLSetAttributeTask *task = [XLinkTMLSetAttributeTask setAttributeTaskWithDevice:device dataPayload:dataPayload timeout:10 completionHandler:^(id  _Nullable result, NSError * _Nullable error) {
    if (error) {
        NSLog(@"服务调用失败了");
    } else {
        NSLog(@"服务调用成功了");
    }
}];
[task start];
  • 调用设备物模型服务 相比于属性,服务可通过一条指令实现更复杂的业务逻辑。其中调用设备物模型服务使用 XLinkTMLInvokeServiceTask。
objective-c
//修改物模型属性,控制设备
NSDictionary *dataPayload = @{
    @"v" : @"2",
    @"input" : @{
        // 这里根据实际填入参数
    }
};
NSString *serviceName = @"name"; // 这里根据实际填入服务名
XLinkTMLInvokeServiceTask *invokeServiceTask = [XLinkTMLInvokeServiceTask invokeServiceTaskWithDevice:device serviceName:serviceName dataPayload:dataPayload timeout:10 completionHandler:^(id  _Nullable result, NSError * _Nullable error) {
    if (error) {
        NSLog(@"服务调用失败了");
    } else {
        NSLog(@"服务调用成功了");
    }     
}];
[invokeServiceTask start];
3.5、移除设备

移除设备会将设备从设备维护列表中移除并取消用户与设备之间的绑定关系,使用XLinkRemoveDeviceTask。

objective-c
//新建删除设备任务
XLinkRemoveDeviceTask *removeDeviceTask = [XLinkRemoveDeviceTask removeDeviceTaskWithDevice:device
                                                                                    timeout:10
                                                                          completionHandler:^(id result, NSError *error) {
    if (!error) {
        //删除成功
    }else{
        //删除失败
    }
}];
[removeDeviceTask start];
3.6、同步设备列表

在添加订阅成功设备之后,当前用户会与该设备存在绑定关系,在任何时候都可以从云端同步到该设备并进行设备的控制操作,使用XLinkSyncDeviceListTask。

objective-c
XLinkSyncDeviceListTask *syncTask = [XLinkSyncDeviceListTask syncDeviceListTaskWithVersion:0 //目前只需要填入0即可
                                                                                   timeout:10
                                                                              connectLocal:YES //同步设备列表后是否需要和设备建立本地连接
                                                                         completionHandler:^(id result, NSError *error)  {
    if (!error) {
        //同步设备列表成功,设备列表会通过result返回
    }else{
        //同步设备列表失败
    }
}];
[syncTask start];

进阶功能使用说明

在本章节中,我们会介绍讲解SDK的基础功能的使用,通过本章节的内容,您基本可以实现百分之九十的功能。

通过本章节的学习,您可以学习到以下的内容:

1.使用流程简介

希望通过介绍SDK的使用流程,可以让您更合理的安排APP项目的架构和进行代码上实现。

2.SDK的基本配置

这里介绍的是SDK正常运行所需要的一些配置,正常情况下使用默认配置就可以。

3.用户授权功能

如果需要使用的SDK的云端功能,包括希望接收到云端的推送消息EventNotify,或者订阅设备、和设备进行云端通信等,都必须先进行用户授权操作,以实现SDK和云端进行有效的连接。

用户授权一般分为物联云平台用户账号体系的用户授权和微信、微博、QQ等第三方用户授权。

4.设备功能

SDK的核心功能就是和设备之间进行通信,包括维护和设备之间的连接、扫描发现设备、添加订阅设备、控制设备(设置设备物模型属性)、获取设备状态(获取设备物模型属性/监听设备的物模型属性上报)等,这些都会在设备功能的模块中详细讲解。

5.云端消息推送

云端消息推送(EventNotify)可以理解为应用内推送,在APP和云端连接之后,可以接收到云端发送过来的实时消息,包括有设备的告警消息、分享消息等。开发者可以根据具体业务的情况处理对应的云端推送。

6.Restful API 使用

SDK封装了部分常用的Restful API,例如用户注册、登陆、找回密码等等接口,另外没有封装的,开发者可以根据使用文档自行封装。