本節將會介紹如何開發App端的設備配網、用戶綁定等功能。
概述
配網部分,提供了以下頁面的開發方式:
基于配網SDK自行開發配網界面(設備配網和設備綁定)。
說明基于配網SDK開發的設備類型主要有WiFi、以太網、蜂窩網、藍牙、ZigBee、BLE Mesh。
綁定部分,介紹了不同設備類型的綁定接口:
基于token方式的設備綁定(Wi-Fi、以太網)。
基于時間窗口方式的設備綁定(蜂窩網、藍牙、Zigbee、其他)。
基于配網SDK自行開發配網界面
Wi-Fi設備配網界面開發
配網方案介紹,請參見Wi-Fi 配網方案介紹。
Android APP SDK的介紹,請參見配網SDK。
iOS APP SDK的介紹,請參見配網SDK。
配網相關的最佳實踐,請參見Android App Native開發配網。
Zigbee設備配網界面開發
Zigbee設備的配網指的是將Zigbee設備連接到某個Zigbee網關的過程,Zigbee的配網流程如下圖所示。
指定網關的IoTID
開發者可以根據用戶綁定的設備去拉取用戶綁定的Zigbee網關設備,并讓用戶從中選擇希望接入Zigbee設備的網關,從而明確網關的IoTID。
拉取用戶已綁定設備列表的接口為:/uc/listBindingByAccount,詳細調用方法如下。
Android系統:Android API通道使用說明
iOS系統:iOS API通道使用說明
指定Zigbee設備的ProductKey
開發者可以通過掃碼方式獲取設備的ProductKey,或者通過列出Zigbee產品列表讓用戶選擇的方式獲知Zigbee設備的ProductKey。
配網引導
由于不同Zigbee設備的配對按鈕位置與外觀不同,廠家要將自己Zigbee設備的配對按鍵的指示圖片放在生活物聯網平臺上,開發者可以通過待配網Zigbee設備的ProductKey去生活物聯網平臺獲取設備的配網引導頁面,顯示給用戶顯示如何啟動Zigbee設備的配網。
獲取產品配網引導頁面的接口為
/awss/enrollee/guide/get
。調用方法請參見產品管理服務。網關添加子設備
調用云端接口讓網關進入允許添加設備狀態,并等待來自云端的配網結果。
設置網關允許添加設備的接口為
/thing/gateway/permit
。調用方法請參見配網服務。等待配網結果的topic為
/thing/topo/add/status
,詳細調用方法如下。Android系統:Android API通道使用說明
iOS系統:iOS API通道使用說明
最后將接收到的配網結果向用戶顯示即可。
以太網設備開發
對于接入設備端SDK的以太網設備,配網SDK提供以太網設備的發現和獲取綁定token的能力。
以太網設備發現
以太網設備的發現依賴配網SDK來實現,詳細調用方法如下。
Android系統:配網SDK以太網設備發現
iOS系統:配網SDK以太網設備發現
以太網設備綁定
以太網設備的綁定分為兩個部分:獲取綁定token和調用綁定接口。
獲取以太網設備綁定token
以太網設備獲取token和Wi-Fi設備獲取綁定token的邏輯是一致的,詳細調用方法如下。
Android系統:配網SDK以太網設備獲取綁定token
iOS系統:配網SDK以太網設備獲取綁定token
調用平臺提供的配網插件
在產品-人機交互的配網引導中,手動填寫配網引導頁面中的圖片和文字。該插件中兼容了Wi-Fi、以太網和蜂窩網的配網流程。其中Wi-Fi僅支持一鍵配網、設備熱點配網和手機熱點配網,如需其他配網方式,請使用基于配網SDK開發配網界面。
調用配網的插件如下。
插件ID國內版:
a123kfz2KdRdrfYc
插件ID國際版:
a223c2beCJQ2Xpk2
插件入參參數介紹如下。
屬性 | 說明 | 類型 | 是否必選 | 默認值 |
productKey | 產品的唯一標識符。 | String | 是 | 無 |
deviceName | 同一產品下,設備的唯一標識符。本地發現設備進入配網、GPRS設備掃碼配網時需用到該參數。 | String | 否 | 無 |
token | 設備令牌,用于綁定設備時鑒權,本地發現已配網設備時需使用該參數。 | String | 否 | 無 |
addDeviceFrom | 標識該設備是由路由器發現的或零配設備發現的待配設備,調用本地發現接口時會返回該值。該參數配置如下。
| String | 否 | 無 |
插件出參,退出配網流程。
屬性 | 類型 | 必選 | 默認值 |
productKey | String | 是 | 無 |
deviceName | String | 是 | 無 |
代碼示例
Android代碼示例:
// 啟動插件 Bundle bundle = new Bundle(); bundle.putString("productKey", pk); Router.getInstance().toUrlForResult(activity, "link://router/connectConfig",{your_request_code}, bundle); // 接收配網結果 protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... if (REQUEST_CODE_PRODUCT_ADD == requestCode) { if (Activity.RESULT_OK != resultCode) { // 配網失敗 return; } String productKey = data.getStringExtra("productKey"); String deviceName = data.getStringExtra("deviceName"); // 配網成功 } }
iOS代碼示例:
NSMutableDictionary *options = [NSMutableDictionary dictionary]; options[@"productKey"] = device.productKey; options[@"deviceName"] = device.deviceName; options[@"token"] = device.token; options[@"addDeviceFrom"] = device.addDeviceFrom; IMSRouterCallback block = ^(NSError *error, NSDictionary *info) { [self.navigationController popToViewController:self animated:YES]; if (error) { // 處理錯誤信息 } else if (info && [info count] > 0) { // 配網成功 } else { // 配網正常退出... } }; options[AKRouterCompletionHandlerKey] = block; // 配網插件id NSURL *url = [NSURL URLWithString:@"link://router/connectConfig"]; //NSString *pluginId = @"a123kfz2KdRdrfYc"; //以國內版插件ID舉例, 此方法是老方法,現在統一用 router的方式調用 //NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"link://plugin/%@", pluginId]]; [[IMSRouterService sharedService] openURL:url options:options completionHandler:^(BOOL success) { if (!success) { // 進入配網插件失敗 } }];
設備綁定
設備綁定的流程圖如下。
API相關介紹如下。
Wi-Fi、以太網,使用基于token方式設備綁定接口。
蜂窩網、藍牙、Zigbee、其他,使用基于時間窗口方式的綁定設備接口。
更多配網相關API的介紹,如本地發現、配網、綁定等,請參見配網服務。
用戶關系API的介紹,如解綁、查詢綁定關系、分享設備等,請參見用戶服務。
Android獲取設備token代碼示例如下。
LocalDeviceMgr.getInstance().getDeviceToken(productKey, deviceName, 60*1000, new IOnDeviceTokenGetListener() { @Override public void onSuccess(String token) { // 獲取到綁定需要的token //TODO 用戶根據具體業務場景調用 } @Override public void onFail(String reason) { } });
iOS獲取設備token代碼示例如下。
[[IMLLocalDeviceMgr sharedMgr] getDeviceToken:self.productKey deviceName:self.deviceName timeout:60 resultBlock:^(NSString *token, BOOL boolSuccess) { if (token && boolSuccess) { // 獲取token成功 } else { // 獲取token失敗 } } ];