生活物聯網平臺提供了免費的天貓精靈快捷通道。您的產品只需定義了平臺的標準功能屬性,且在天貓精靈支持的品類中,在完成相應的配置后,即可快速連接天貓精靈,實現天貓精靈音箱對設備的控制。
限制條件
生活物聯網平臺遵循ICA數據標準,為了確保您的設備可以被天貓精靈準確識別和控制,請確保使用標準功能。
僅支持在中國境內激活的設備對接天貓精靈。
消費者使用
阿里IoT的公版免開發App支持天貓精靈控制,使用方式如下步驟所示。
用戶擁有一臺支持天貓精靈的設備,下載廠家自有品牌App,綁定該設備。
用戶擁有一臺天貓精靈音箱,從手機端應用商店下載天貓精靈App并綁定該音箱。
在廠家自有品牌App中,用戶授權淘寶賬號登錄,成功綁定天貓精靈。
說明App賬號和淘寶賬號是一一對應的。
用戶在天貓精靈App的設備列表中,在我家頁簽中可以看到綁定的設備。
完成以上步驟后,您可以通過天貓精靈音箱控制您的設備。
控制臺開通
開發Android自有App
由于天貓精靈使用淘寶賬號體系,需要在您的自有品牌App中,集成淘寶的賬號授權,從而實現和天貓精靈的對接。
調用淘寶登錄授權頁面的喚起接口。
開發步驟如下圖所示。
單擊授權按鈕,進入授權界面。
加載WebView,授權網址URL如下(需要拼接AppKey)。
String url = "https://oauth.taobao.com/authorize?response_type=code&client_id=<項目的appKey>&redirect_uri=<控制臺定義的回調地址>&view=wap";
在shouldOverrideUrlLoading中判斷地址是否包含code,獲取code并傳到上一步訪問URL后的界面。
mWebView.setWebViewClient(new WebViewClient() { //設置結束加載函數 @Override public void onPageFinished(WebView view, String url) { topbar.setTitle(view.getTitle()); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (isTokenUrl(url)) { Intent intent = new Intent(); intent.putExtra("AuthCode", mAuthCode); setResult(RESULT_CODE, intent); finish(); return true; } view.loadUrl(url); return false; } }); private boolean isTokenUrl(String url) { if (!TextUtils.isEmpty(url)) { if ( url.contains("code=")) { String[] urlArray = url.split("code="); if (urlArray.length > 1) { String[] paramArray = urlArray[1].split("&"); if (paramArray.length > 1) { mAuthCode = paramArray[0]; return true; } } } } return false; }
根據code綁定淘寶賬號。
示例代碼如下,其中
/account/taobao/bind
接口的說明,請參見賬號服務。public void bindAccount(String authCode) { JSONObject params = new JSONObject(); if (null != authCode) { params.put("authCode", authCode); } Map<String, Object> requestMap = params.getInnerMap(); IoTRequest ioTRequest = new IoTRequestBuilder() .setAuthType("iotAuth") .setApiVersion("1.0.5") .setPath("/account/taobao/bind") .setParams(requestMap) .setScheme(Scheme.HTTPS) .build(); new IoTAPIClientFactory().getClient().send(ioTRequest, new IoTCallback() { @Override public void onFailure(IoTRequest ioTRequest, Exception e) { } @Override public void onResponse(IoTRequest ioTRequest, IoTResponse ioTResponse) { } }); }
(可選)調用接口解除綁定。
// 用戶解綁淘寶Id IoTRequestBuilder builder = new IoTRequestBuilder(); builder.setPath("/account/thirdparty/unbind"); builder.setApiVersion("1.0.5"); builder.setAuthType("iotAuth"); builder.addParam("accountType","TAOBAO"); IoTRequest ioTRequest = builder.build(); new IoTAPIClientFactory().getClient().send(ioTRequest, new IoTCallback() { @Override public void onFailure(IoTRequest ioTRequest, final Exception e) {} @Override public void onResponse(IoTRequest ioTRequest, final IoTResponse ioTResponse) {} }); ///account/thirdparty/unbind接口的說明,請參見賬號服務 //此處para = @{@"accountType":@"TAOBAO"}
判斷是否已綁定。
/account/thirdparty/get
接口的說明,請參見賬號服務。// 查詢當前用戶綁定淘寶Id IoTRequestBuilder builder = new IoTRequestBuilder(); builder.setPath("/account/thirdparty/get"); builder.setApiVersion("1.0.5"); builder.setAuthType("iotAuth"); builder.addParam("accountType","TAOBAO"); IoTRequest ioTRequest = builder.build(); new IoTAPIClientFactory().getClient().send(ioTRequest, new IoTCallback() { @Override public void onFailure(IoTRequest ioTRequest, final Exception e) {} @Override public void onResponse(IoTRequest ioTRequest, final IoTResponse ioTResponse) {} });
開發iOS自有App
由于天貓精靈使用淘寶賬號體系,需要在您的自有品牌App中,集成淘寶的賬號授權,從而實現和天貓精靈的對接。
調用淘寶登錄授權頁面的喚起接口。
開發步驟如下圖所示。
單擊授權按鈕,進入授權界面。
加載WebView,授權網址URL如下(需要拼接AppKey)。
https://oauth.taobao.com/authorize?response_type=code&client_id=<項目的appKey>&redirect_uri=<控制臺定義的回調地址>&view=wap
初始化一個WebView,并設置代理加載。示例代碼如下。
- (void)viewDidLoad { [super viewDidLoad]; [super viewDidLoad]; WKWebView *webView = [[WKWebView alloc]init]; [self.view addSubview:webView]; [webView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view); make.right.equalTo(self.view); make.top.equalTo(self.view); make.bottom.equalTo(self.view); }]; webView.navigationDelegate = self; //代理:WKNavigationDelegate [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://oauth.taobao.com/authorize?response_type=code&client_id=%@&redirect_uri=控制臺定義的回調地址&view=wap", 項目的appkey]]]]; }
加載頁面成功后,使用真實的淘寶賬號登錄。
登錄成功后,處理您在控制臺填寫的回調地址。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSRange range = [navigationAction.request.URL.absoluteString rangeOfString:@"控制臺定義的回調地址"]; if (range.location){ //允許跳轉 decisionHandler(WKNavigationActionPolicyAllow); } else { //不允許跳轉 decisionHandler(WKNavigationActionPolicyCancel); NSURLComponents *components = [NSURLComponents componentsWithString:navigationAction.request.URL.absoluteString]; for (NSURLQueryItem *item in components.queryItems){ if ([item.name isEqualToString:@"code"]){ //用戶綁定淘寶ID請求:此處IMSTmallSpeakerApi 通過下面代碼封裝一個基礎請求類 [IMSTmallSpeakerApi bindTaobaoIdWithParams:@{@"authCode":item.value} completion:^(NSError *err, NSDictionary *result) { if (self.completion){ self.completion(err, result); } [self.navigationController popViewControllerAnimated:YES]; }]; break; } } } } // 封裝的IMSTmallSpeakerApi請求類,依賴請求類#import <IMSApiClient/IMSApiClient.h> // .h中 + (void)requestTmallSpeakerApi:(NSString *)api version:(NSString *)ver params:(NSDictionary *)para completion:(void (^)(NSError *, id))completion; // .m中 + (void)requestTmallSpeakerApi:(NSString *)api version:(NSString *)ver params:(NSDictionary *)para completion:(void (^)(NSError *, id))completion { IMSIoTRequestBuilder *builder = [[IMSIoTRequestBuilder alloc] initWithPath:api apiVersion:ver params:para]; [builder setScheme:@"https"]; IMSRequest *request = [[builder setAuthenticationType:IMSAuthenticationTypeIoT] build]; [IMSRequestClient asyncSendRequest:request responseHandler:^(NSError * _Nullable error, IMSResponse * _Nullable response) { if (completion) { //返回請求過期后,需要重新登錄;重新登錄后重新初始化主框架,不需要重新請求 if (response.code == 401) { if (NSClassFromString(@"IMSAccountService") != nil) { // 先退出登錄 if ([[IMSAccountService sharedService] isLogin]) { [[IMSAccountService sharedService] logout]; } return; } } if (!error && response.code == 200) { completion(error, response.data); return ; } NSError *bError = [NSError errorWithDomain:NSURLErrorDomain code:response.code userInfo:@{NSLocalizedDescriptionKey: response.localizedMsg ? : @"服務器應答錯誤"}]; completion(bError, nil); return; } }]; }
// 用戶綁定淘寶Id + (void)bindTaobaoIdWithParams:(NSDictionary *)para completion:(void (^)(NSError *, NSDictionary *))completion{ [self requestTmallSpeakerApi:@"/account/taobao/bind" version:@"1.0.5" params:para completion:completion]; ///account/taobao/bind接口說明請參見賬號服務 } //此處para = @{@"authCode":@"xxxx"},其中xxxx為網頁回調的code,具體查看登錄成功后的回調處理步驟
處理回調后返回code200,表示授權成功。此時請刷新網頁。
(可選)調用接口解除綁定。
// 用戶解綁淘寶Id + (void)unbindTaobaoIdWithParams:(NSDictionary *)para completion:(void (^)(NSError *, NSDictionary *))completion{ [self requestTmallSpeakerApi:@"/account/thirdparty/unbind" version:@"1.0.5" params:para completion:completion]; } ///account/thirdparty/unbind接口的說明,請參見賬號服務 //此處para = @{@"accountType":@"TAOBAO"}
判斷是否已綁定。
/account/thirdparty/get
接口的說明,請參見賬號服務。// 查詢用戶綁定的淘寶Id + (void)getTaobaoIdWithParams:(NSDictionary *)para completion:(void (^)(NSError *, NSDictionary *))completion{ [self requestTmallSpeakerApi:@"/account/thirdparty/get" version:@"1.0.5" params:para completion:completion]; } //此處para = @{@"accountType":@"TAOBAO"}
返回數據存在以下內容代表已綁定。
{ accountId = 90xxx335; accountType = TAOBAO; linkIndentityId = 50ebop9xxxxxxxxxxxxxx8dbc58643423092968; }