智能生活 App SDK 开发入门教程【内附代码段 】
涂鴉智能生活 App SDK 安卓版提供了即全面又靈活的 IoT App 開發模式。大家可以通過本教程在兩小時內快速開發一款自己的 IoT App,并實現如下功能:
- ?使用手機號碼注冊并登錄一個用戶賬號。
- ?在登錄狀態下創建一個家庭,并查看和修改家庭信息。
- ?使用熱點模式為設備配網并連接設備。
- ?使用自己創建的 App 控制該設備。
大家可以前往 App 開發平臺查看本教程中的示例代碼,本次教程按功能模塊進行分類,方便大家可以快速找到對應的代碼參考學習。
效果展示
學習完本教程,并且結合一定的面板開發后,大家可以創建出一個類似以下安卓 App 的 Demo。
準備工作
在您開始本教程前,請先確保您已經 :
在涂鴉 IoT 平臺注冊賬號并創建 App,獲取 SDK 的 AppKey 和 AppSecret。
使用 Android Studio 將安卓版智能生活 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:重置密碼 |
使用手機號碼注冊賬號
使用手機號碼注冊賬號前,需要調用獲取驗證碼接口,傳入相應?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 的全局變量存儲。當然,也可以在本地隨時切換當前家庭,平臺并不會記錄這一信息。在本教程和配套的 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());控制設備
控制設備需要初始化設備控制接口。接口向設備發送功能點,改變設備狀態或功能,來達到設備控制的目的。
同樣以燈泡為例,假設開啟一個燈具采用 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 了!感興趣的快去試試吧 👉 涂鴉 IoT 開發平臺。
總結
以上是生活随笔為你收集整理的智能生活 App SDK 开发入门教程【内附代码段 】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EM算法推导
- 下一篇: 参考文献tool-mendeley_拔剑