智能生活 App SDK 开发入门教程
涂鸦智能生活 App SDK 安卓版提供了即全面又灵活的 IoT App 开发模式,大家可以通过本教程在两小时内快速开发一款自己的 IoT App,并实现如下功能:
- 使用手机号码注册并登录一个用户账号。
- 在登录状态下创建一个家庭,并查看和修改家庭信息。
- 使用热点模式为设备配网并连接设备。
- 使用自己创建的 App 控制该设备。
前往App 开发平台下载 Sample 查看本教程中的示例代码,本次教程按功能模块进行分类,大家可以快速找到对应的代码参考学习。
效果展示
学习完本教程,并且结合一定的面板开发后,可以创建一个类似以下安卓 App 的 Demo。
准备工作
在开始本教程前,请先确保已完成以下步骤 :
在涂鸦 IoT 开发平台注册账号并创建 App,获取 SDK 的 AppKey 和 AppSecret。具体步骤查看《准备工作》。
使用 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
中 roomList
、deviceList
、groupList
、sharedDeviceList
、sharedGroupList
等属性均为空。我们需要调用 【家庭的详细信息】接口获取上述属性的具体内容。
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) {}});
开始设备配网
调用【配网接口】需要提供 builder
,builder
中需要路由器的 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 |
|
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 开发入门教程相关推荐
- IP 摄像机移动应用 SDK 开发入门教程(安卓版)
涂鸦智能安卓版摄像机(IP Camera,简称 IPC)SDK 是基于智能生活 App SDK 开发而成. 通过移动应用控制物理网设备是常见的使用场景,但由于设备的品类丰富,增大了应用开发难度.因此 ...
- 智能生活 App SDK 之家庭信息管理接口(全)
涂鸦智能生活 App SDK 为全屋智能业务场景的移动端开发提供各类模块和组件.因此,家庭是抽象于全屋智能场景的概念,指用户在以家或者场所为单位的范围内所有设备.账号.权限等信息的集合. 家庭管理主要 ...
- EOS智能合约与DApp开发入门教程
EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化应用(Decentralized Application)而设计,其代码开源. 比特币被称为区块链1.0,因为它开 ...
- 智能生活 App SDK 如何实现设备控制
随着 IoT 设备的普及,如何安全.灵活地管理对设备的控制权限变得更加复杂. 在以往简单的应用场景中,控制端 App 仅仅需要对一个设备进行控制.但随着家庭拥有的物联网设备愈加丰富,控制端 App 需 ...
- 智能生活 App 垂直品类- IPC SDK 架构及快速集成配置(安卓版)
除了通用设备功能的应用开发,针对部分常见的全屋智能场景设备,智能生活 App SDK 提供了单独的垂直品类 SDK.包括智能摄像机 SDK.智能门锁 SDK.扫地机机器人 SDK.智能照明控制 SDK ...
- 傻瓜式Android APP开发入门教程
这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,android各种机子和rom的 ...
- android智能机顶盒的ota设计,智能机顶盒APP方案开发,让生活更有趣!
原标题:智能机顶盒APP方案开发,让生活更有趣! 目前的有线存量机顶盒配置低.支撑业务比较少.用户体验也非常差,只能满足基本的看电视需求,并不支持新业务形态,也很难进行新业务拓展,面临用之无味.弃之可 ...
- 移动端app开发-03-IOS 初级开发入门教程
移动端app开发-03-IOS 初级开发入门教程 什么是iOS iOS是苹果公司为它的移动设备(iPhone.iPad.iWatch等)开发的移动操作系统. iOS发展史 2007年苹果发布iPh ...
- 涂鸦蓝牙SDK开发系列教程——2.产品创建
要使用涂鸦蓝牙模组开发一款智能产品,首先要在 涂鸦 IoT 平台 上创建对应的产品.如果还没有涂鸦开发者账号,可以点此 链接 进行注册,企业用户可参考 企业认证流程 完成企业认证. 接下来以 使用 B ...
- 涂鸦蓝牙SDK开发系列教程——5.应用开发
在前几节课中已经介绍了如何在 涂鸦 IoT 平台 上创建智能产品以及如何搭建涂鸦蓝牙模组的开发环境,在此基础上,本节课将继续以 BTU 模组为例,介绍如何使用 涂鸦蓝牙模组及其 SDK 开发一款温湿度 ...
最新文章
- Redis 实现延迟队列?深深被折服!!
- 在eclipse导入SSH项目
- term和match查询总结(中文检索)
- python中字典类型中的item是什么-Python中的字典介绍
- 实时计算轻松上手,阿里云DataWorks Stream Studio正式发布
- numpy—np.eye、np.diag与np.tile
- Outlook 2016最佳实践视频课程上线
- 海康SDK设备信息NET_DVR_GET_DEVICECFG解析
- 计算机故障升温降温法,电脑故障排除1000例
- Ingenuous Cubrency UVA - 11137(完全背包)
- Spring Cloud H (五)服务网关 GateWay
- 关于视频编码I P B帧存储,编码,解码,显示顺序的理解
- matlab中opc没有注册类,电脑中出现没有注册类别的错误提示的多种解决方法
- 软考高项(信息系统项目管理师)考试资料汇总和学习方法总结
- PPPOE和IPOE
- 给初学者:用VB写外挂 ———— 序言
- MATLAB中运动造成的图像模糊
- 【原创】十六进制数值与字符串之间的转换(原封不动的转换)
- 下列python语句正确的是_python老师课上练习题汇总
- 北理在线作业答案c语言,18秋北理工《计算机组成原理》在线作业答案
热门文章
- Android(root)设备HTTPS请求时间校准
- 如何从PayPal提现
- 【JavaScript】牛客编程:实现一个打点计时器
- 图像滤镜艺术---乐高像素拼图特效
- [zkaq靶场]命令执行--IBOS协同办公系统通杀漏洞
- 火狐firefox插件plugin:
- 关于IE6无法升级为IE7或者IE8的问题
- 访问 github.com 的请求遭到拒绝您未获授权,无法查看此网页解决办法
- N卡电脑Ubuntu20.04+N卡驱动安装+windows11双系统安装(不符合条件的电脑也可以安装win11)2021.11.13
- 利用webmagic爬去招聘信息,并输入到Hbase数据库中