涂鸦智能生活 App SDK 安卓版提供了即全面又灵活的 IoT App 开发模式,大家可以通过本教程在两小时内快速开发一款自己的 IoT App,并实现如下功能:

  • 使用手机号码注册并登录一个用户账号。
  • 在登录状态下创建一个家庭,并查看和修改家庭信息。
  • 使用热点模式为设备配网并连接设备。
  • 使用自己创建的 App 控制该设备。

前往App 开发平台下载 Sample 查看本教程中的示例代码,本次教程按功能模块进行分类,大家可以快速找到对应的代码参考学习。

效果展示

学习完本教程,并且结合一定的面板开发后,可以创建一个类似以下安卓 App 的 Demo。

准备工作

在开始本教程前,请先确保已完成以下步骤 :

  1. 在涂鸦 IoT 开发平台注册账号并创建 App,获取 SDK 的 AppKey 和 AppSecret。具体步骤查看《准备工作》。

  2. 使用 Android Studio 将安卓版智能生活 App SDK 集成到您的项目中。教程参看我之前的文章《如何将安卓版智能生活 App SDK 集成到开发环境中?》。

第一步:注册用户账号

本模块中,仅演示使用手机号注册登录。

除此以外,涂鸦智能生活 App SDK 还提供了邮箱、第三方、匿名等多种注册登录方式。

注册用户账号时:

  • 需要提供 countryCode 参数来区分注册地区,用于就近选择涂鸦 IoT 平台的可用区。如中国大陆为 86,美国为 1

  • 接下来将频繁地调用对象 User。它存储了当前用户的所有信息,通过 TuyaHomeSdk.getUserInstance() 获取到 ITuyaUser,它提供了相关的登录注册方法。

查询验证码服务可用地区

为了加强用户信息的数据安全,涂鸦优化验证码和添加了账号限制。只有验证码服务可用的地区,才可以发送验证码。需要先查询自己的开发者账号是否已经在涂鸦 IoT 开发平台开通验证码服务的可用地区列表。

TuyaHomeSdk.getUserInstance().getWhiteListWhoCanSendMobileCodeSuccess(new IWhiteListCallback() {@Overridepublic void onSuccess(WhiteList whiteList) {Toast.makeText(mContext, "Whitelist Success:" + whiteList.getCountryCodes(), Toast.LENGTH_SHORT).show();}@Overridepublic void onError(String code, String error) {Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();}});

返回值 whiteList 表示一个或多个国家或地区,以 , 隔开取值,例如 86 和 01

获取注册账号的验证码

与大部分注册流程类似,用户必须先获取验证码。无论是手机或是邮箱,都可以使用统一的获取验证码接口在注册及后续密码修改,验证码登录,信息完善等操作中获取相应的验证码。

TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName(String userName, String region, String countryCode, int type, IResultCallback callback);

参数说明

参数 说明
userName 手机号码/邮箱账号
region 区域,默认填写:“” 即可
countryCode 手机区号:如 “86”
callback 回调
type 发送验证码类型:
1:注册
2:登录
3:重置密码

TuyaHomeSdk.getUserInstance().sendVerifyCodeWithUserName("xxx6/7825***66@123.com", "", "86", 1/2/3, new IResultCallback() {@Overridepublic void onError(String code, String error) {Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();}@Overridepublic void onSuccess() {Toast.makeText(mContext, "Get code success:", Toast.LENGTH_SHORT).show();}});

使用手机号码注册账号

使用手机号码注册账号前,需要调用获取验证码接口,传入相应 type。然后调用号码注册接口,需要上传国家码、手机号码、密码以及获取到的验证码。

TuyaHomeSdk.getUserInstance().registerAccountWithPhone("86","13666666666","123456","124332", new IRegisterCallback() {@Overridepublic void onSuccess(User user) {Toast.makeText(mContext, "Register success", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(String code, String error) {Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();}
});

使用手机号码登录账号

在注册成功后,就可以使用国家码、手机号和密码登录账号。

TuyaHomeSdk.getUserInstance().loginWithPhonePassword("86", "13666666666", "123456", new ILoginCallback() {@Overridepublic void onSuccess(User user) {Toast.makeText(mContext, "Login success:" +TuyaHomeSdk.getUserInstance().getUser().getUsername(), Toast.LENGTH_SHORT).show();}@Overridepublic void onError(String code, String error) {Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();}
});

第二步:创建和管理家庭

家庭是智能生活 App SDK 开发下实际场景的最大单位,IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。

开发者可以在用户账号下创建任意多个家庭,在指定家庭下,还可以添加并管理多个房间和用户成员。

操作家庭模块时,我们将频繁调用对象 ITuyaHomeManager 和 HomeBean

对象 说明
HomeBean 存放了家庭的基本信息,如 ID、名字、位置等。
TuyaSmartHome 存放了家庭相关的所有功能,如单个家庭信息管理,家庭下的家庭成员管理,房间管理等。ITuyaHomeManager 需要使用正确的 homeId 用 TuyaHomeSdk.getHomeManagerInstance() 进行初始化。

创建家庭

在登录状态下我们可以创建家庭,之后对于房间,成员,设备等对象的管理都基于家庭下。创建家庭需要通过 ITuyaHomeManager 调用【创建家庭】接口。

TuyaHomeSdk.getHomeManagerInstance().createHome(name, lon, lat, geoName, rooms, new ITuyaHomeResultCallback() {@Overridepublic void onSuccess(HomeBean bean) {// do something}@Overridepublic void onError(String errorCode, String errorMsg) {// do something}});

查询家庭列表

在登录状态下我们可以直接获取家庭列表。如果还没创建过家庭,将返回 空数组

TuyaHomeSdk.getHomeManagerInstance().queryHomeList(new ITuyaGetHomeListCallback() {@Overridepublic void onSuccess(List<HomeBean> homeBeans) {// do something}@Overridepublic void onError(String errorCode, String error) {// do something}});

获取家庭详细信息

在获取家庭列表或通过 HomeId 初始化得到的 ITuyaHomeManager 的 HomeBean 中 roomListdeviceListgroupListsharedDeviceListsharedGroupList 等属性均为空。我们需要调用 【家庭的详细信息】接口获取上述属性的具体内容。

TuyaHomeSdk.newHomeInstance(10000).getHomeDetail(new ITuyaHomeResultCallback() {@Overridepublic void onSuccess(HomeBean bean) {// do something}@Overridepublic void onError(String errorCode, String errorMsg) {// do something}});

最佳实践

在创建了家庭后,后续房间成员、用户配网等相关操作均需要基于某一特定家庭。因此建议将这一特定家庭作为 App 的全局变量存储。

当然,我们也可以在本地随时切换当前家庭,涂鸦 IoT开发 平台并不会记录这一信息。在本教程和配套的 Sample 中,默认将列表的第一个家庭设为当前家庭。

第三步:设备配网

简单来说,配网就是将设备连接并注册到云端,使其拥有与云端远程通信的能力。涂鸦智能生活 App SDK提供了丰富的配网方式以支持大部分智能设备。如 Wi-Fi 连接,蓝牙连接等。

配网方式介绍

本模块以 Wi-Fi 配网为例介绍如何使用 SDK 将设备配置到云端。Wi-Fi 配网方式包括 快连模式(EZ)、热点模式(AP)、扫 App 二维码三种方式。

相比 EZ 模式,AP 模式成功率高、可靠性好,对手机和路由器有兼容性要求小。配网成功率高于 EZ 模式。因此,在之后的版本中,我们推荐使用 AP 模式 代替 EZ 模式

获取配网 Token

开始配网之前,SDK 需要在联网状态下从涂鸦云获取配网 Token,然后才可以开始热点模式配网。Token 的有效期为 10 分钟,且配置成功后就会失效,再次配网需要重新获取。获取 Token 需要上传当前的 homeId,因此您需要确保账号处于登录状态并至少创建了一个家庭。

TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId,new ITuyaActivatorGetToken() {@Overridepublic void onSuccess(String token) {}@Overridepublic void onFailure(String s, String s1) {}});

开始设备配网

调用【配网接口】需要提供 builderbuilder 中需要路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。

ActivatorBuilder builder = new ActivatorBuilder().setSsid(ssid).setContext(context).setPassword(password).setActivatorModel(ActivatorModelEnum.TY_EZ).setTimeOut(timeout).setToken(token).setListener(new ITuyaSmartActivatorListener() {@Overridepublic void onError(String errorCode, String errorMsg) {}@Overridepublic void onActiveSuccess(DeviceBean devResp) {//多个设备同时配网,将多次回调}@Overridepublic void onStep(String step, Object data) {}}));
ITuyaActivator mTuyaActivator = TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder);
//开始配网
mTuyaActivator.start();

使用 AP模式 配网时,我们需要将 activatorModel 传入为 ActivatorModelEnum.TY_AP 以监听配网结果的回调。

ActivatorBuilder builder = new ActivatorBuilder().setContext(context).setSsid(ssid).setPassword(password).setActivatorModel(ActivatorModelEnum.TY_AP).setTimeOut(timeout).setToken(token).setListener(new ITuyaSmartActivatorListener() {@Overridepublic void onError(String errorCode, String errorMsg) {}@Overridepublic void onActiveSuccess(DeviceBean devResp) {}@Overridepublic void onStep(String step, Object data) {}}));

(可选)停止配网

开始配网操作后,App 会持续广播配网信息,直到配网成功或是超时才停止。如果需要中途取消操作或配网完成,需要调用停止配网接口。

ITuyaActivator mTuyaActivator = TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder);
//停止配网
mTuyaActivator.stop();
//退出页面销毁一些缓存和监听
mTuyaActivator.onDestroy();

第四步:控制设备

本教程主要操作对象包含 ITuyaDevice 和 DeviceBean

对象 说明
DeviceBean
  • 与 ITuyaHomeManager 和 HomeBean 类似,DeviceBean 存放了设备的基本信息,如 ID、名字、图标等。
  • DeviceBean 类的 dps 属性定义了当前设备的状态,称作数据点(DP,Data Point)或功能点,每个 DP 都存储了了一个设备的功能信息。如开关(布尔值),灯泡的亮度(数值型)等,对于设备的控制都通过获取和修改 DP 值实现。
ITuyaDevice 存放了设备相关的所有功能,如功能控制,设备固件管理等。我们需要用正确的 deviceId 初始化一个 ITuyaDevice

查询设备列表

设备成功配网后,我们可以在对应的家庭下调用【获取家庭详细信息】接口,在 HomeBean的 getDeviceList 中查看对应的设备列表。

TuyaHomeSdk.newHomeInstance(10000).getHomeDetail(new ITuyaHomeResultCallback() {@Overridepublic void onSuccess(HomeBean bean) {List<DeviceBean> deviceList = homeBean.getDeviceList();//下文中的deviceBean就是从这里获取}@Overridepublic void onError(String errorCode, String errorMsg) {// do something}});

查看设备信息

设备的功能点信息存放在 dps 中。dps 存放了该设备的所有功能点信息,每个功能点被封装成一个键值对。

List<DeviceBean> deviceList = homeBean.getDeviceList();
Map<String, Object> dps = TuyaHomeSdk.getDataInstance().getDps(deviceBean.getDevId());

控制设备

控制设备需要【初始化设备控制】接口。接口向设备发送功能点,改变设备状态或功能,来达到设备控制的目的。

参数 dps 中可以包含多个功能点,我们可以一次同时改变设备的多个状态。

同样以灯泡为例,假设开启一个灯具采用 101 设备功能点,则开灯的代码如下:

mDevice.publishDps("{\"101\": true}", new IResultCallback() {@Overridepublic void onError(String code, String error) {Toast.makeText(mContext, "开灯失败", Toast.LENGTH_SHORT).show();}@Overridepublic void onSuccess() {Toast.makeText(mContext, "开灯成功", Toast.LENGTH_SHORT).show();}
});

如果需要监听设备状态的改变,如在线状态、移除通知、功能点状态改变等,需要注册 IDevListener 进行监听。

mDevice.registerDevListener(new IDevListener() {/*** DP 数据更新* devId 设备 ID* dpStr 设备发生变动的功能点,为 JSON 字符串,数据格式:{"101": true}*/@Overridepublic void onDpUpdate(String devId, String dpStr){};/*** 设备移除回调* devId 设备 ID*/@Overridepublic void onRemoved(String devId){};/*** 设备上下线回调。如果设备断电或断网,服务端将会在3分钟后回调到此方法。* devId  设备 ID* online 是否在线,在线为 true*/@Overridepublic void onStatusChanged(String devId, boolean online){};/*** 网络状态发生变动时的回调*  devId  设备 ID*  status 网络状态是否可用,可用为 true*/@Overridepublic void onNetworkStatusChanged(String devId, boolean status){};/*** 设备信息更新回调* devId  设备 ID*/@Overridepublic void onDevInfoUpdate(String devId){};
}

(可选)移除设备

调用【移除设备】接口将当前设备从对应家庭下移除。

mDevice.removeDevice(new IResultCallback() {@Overridepublic void onError(String errorCode, String errorMsg) {}@Overridepublic void onSuccess() {}
});

(推荐)集成设备面板

为了减少大家的开发成本,涂鸦针对特定设备提供了一系列的设备控制面板。

实践结果

看到这里,相信大家已经创建了一个自己的 App。然而,真正有趣精彩的部分才刚刚开始。我会在之后推出更多关于智能场景、定时任务、多控关联等功能的介绍。

UI 业务包

为了降低大家的开发成本,涂鸦将 SDK 中按模块进行了功能抽离和 UI 封装,为大家提供了一整套一键接入的 UI 业务包,可以根据需要自由选择需要的业务模块,大家可以自行尝试下。

智能生活 App SDK 开发入门教程相关推荐

  1. IP 摄像机移动应用 SDK 开发入门教程(安卓版)

    涂鸦智能安卓版摄像机(IP Camera,简称 IPC)SDK 是基于智能生活 App SDK 开发而成. 通过移动应用控制物理网设备是常见的使用场景,但由于设备的品类丰富,增大了应用开发难度.因此  ...

  2. 智能生活 App SDK 之家庭信息管理接口(全)

    涂鸦智能生活 App SDK 为全屋智能业务场景的移动端开发提供各类模块和组件.因此,家庭是抽象于全屋智能场景的概念,指用户在以家或者场所为单位的范围内所有设备.账号.权限等信息的集合. 家庭管理主要 ...

  3. EOS智能合约与DApp开发入门教程

    EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化应用(Decentralized Application)而设计,其代码开源. 比特币被称为区块链1.0,因为它开 ...

  4. 智能生活 App SDK 如何实现设备控制

    随着 IoT 设备的普及,如何安全.灵活地管理对设备的控制权限变得更加复杂. 在以往简单的应用场景中,控制端 App 仅仅需要对一个设备进行控制.但随着家庭拥有的物联网设备愈加丰富,控制端 App 需 ...

  5. 智能生活 App 垂直品类- IPC SDK 架构及快速集成配置(安卓版)

    除了通用设备功能的应用开发,针对部分常见的全屋智能场景设备,智能生活 App SDK 提供了单独的垂直品类 SDK.包括智能摄像机 SDK.智能门锁 SDK.扫地机机器人 SDK.智能照明控制 SDK ...

  6. 傻瓜式Android APP开发入门教程

    这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,android各种机子和rom的 ...

  7. android智能机顶盒的ota设计,智能机顶盒APP方案开发,让生活更有趣!

    原标题:智能机顶盒APP方案开发,让生活更有趣! 目前的有线存量机顶盒配置低.支撑业务比较少.用户体验也非常差,只能满足基本的看电视需求,并不支持新业务形态,也很难进行新业务拓展,面临用之无味.弃之可 ...

  8. 移动端app开发-03-IOS 初级开发入门教程

    移动端app开发-03-IOS 初级开发入门教程 什么是iOS   iOS是苹果公司为它的移动设备(iPhone.iPad.iWatch等)开发的移动操作系统. iOS发展史 2007年苹果发布iPh ...

  9. 涂鸦蓝牙SDK开发系列教程——2.产品创建

    要使用涂鸦蓝牙模组开发一款智能产品,首先要在 涂鸦 IoT 平台 上创建对应的产品.如果还没有涂鸦开发者账号,可以点此 链接 进行注册,企业用户可参考 企业认证流程 完成企业认证. 接下来以 使用 B ...

  10. 涂鸦蓝牙SDK开发系列教程——5.应用开发

    在前几节课中已经介绍了如何在 涂鸦 IoT 平台 上创建智能产品以及如何搭建涂鸦蓝牙模组的开发环境,在此基础上,本节课将继续以 BTU 模组为例,介绍如何使用 涂鸦蓝牙模组及其 SDK 开发一款温湿度 ...

最新文章

  1. Redis 实现延迟队列?深深被折服!!
  2. 在eclipse导入SSH项目
  3. term和match查询总结(中文检索)
  4. python中字典类型中的item是什么-Python中的字典介绍
  5. 实时计算轻松上手,阿里云DataWorks Stream Studio正式发布
  6. numpy—np.eye、np.diag与np.tile
  7. Outlook 2016最佳实践视频课程上线
  8. 海康SDK设备信息NET_DVR_GET_DEVICECFG解析
  9. 计算机故障升温降温法,电脑故障排除1000例
  10. Ingenuous Cubrency UVA - 11137(完全背包)
  11. Spring Cloud H (五)服务网关 GateWay
  12. 关于视频编码I P B帧存储,编码,解码,显示顺序的理解
  13. matlab中opc没有注册类,电脑中出现没有注册类别的错误提示的多种解决方法
  14. 软考高项(信息系统项目管理师)考试资料汇总和学习方法总结
  15. PPPOE和IPOE
  16. 给初学者:用VB写外挂 ———— 序言
  17. MATLAB中运动造成的图像模糊
  18. 【原创】十六进制数值与字符串之间的转换(原封不动的转换)
  19. 下列python语句正确的是_python老师课上练习题汇总
  20. 北理在线作业答案c语言,18秋北理工《计算机组成原理》在线作业答案

热门文章

  1. Android(root)设备HTTPS请求时间校准
  2. 如何从PayPal提现
  3. 【JavaScript】牛客编程:实现一个打点计时器
  4. 图像滤镜艺术---乐高像素拼图特效
  5. [zkaq靶场]命令执行--IBOS协同办公系统通杀漏洞
  6. 火狐firefox插件plugin:
  7. 关于IE6无法升级为IE7或者IE8的问题
  8. 访问 github.com 的请求遭到拒绝您未获授权,无法查看此网页解决办法
  9. N卡电脑Ubuntu20.04+N卡驱动安装+windows11双系统安装(不符合条件的电脑也可以安装win11)2021.11.13
  10. 利用webmagic爬去招聘信息,并输入到Hbase数据库中