日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

自有App接入天貓精靈教程

生活物聯網平臺提供了免費的天貓精靈快捷通道。您的產品只需定義了平臺的標準功能屬性,且在天貓精靈支持的品類中,在完成相應的配置后,即可快速連接天貓精靈,實現天貓精靈音箱對設備的控制。

限制條件

  • 生活物聯網平臺遵循ICA數據標準,為了確保您的設備可以被天貓精靈準確識別和控制,請確保使用標準功能。

  • 僅支持在中國境內激活的設備對接天貓精靈。

消費者使用

阿里IoT的公版免開發App支持天貓精靈控制,使用方式如下步驟所示。

  1. 用戶擁有一臺支持天貓精靈的設備,下載廠家自有品牌App,綁定該設備。

  2. 用戶擁有一臺天貓精靈音箱,從手機端應用商店下載天貓精靈App并綁定該音箱。

  3. 在廠家自有品牌App中,用戶授權淘寶賬號登錄,成功綁定天貓精靈。

    說明

    App賬號和淘寶賬號是一一對應的。

  4. 用戶在天貓精靈App的設備列表中,在我家頁簽中可以看到綁定的設備。天貓精靈控制設備

  5. 完成以上步驟后,您可以通過天貓精靈音箱控制您的設備。

控制臺開通

  1. 確認已打開天貓精靈的控制開關。

    1. 選擇一個現有的項目,或創建一個新項目。參見創建項目

    2. 創建一個新產品,參見創建產品

    3. 定義產品的功能,參見定義產品功能

    4. 添加測試設備,參見設備開發與調試

    5. 配置語音交互,詳情請參見配置人機交互

      當選擇交互端為云智能App時,可以開啟語音交互>天貓精靈>控制口令的按鈕,接入天貓精靈語音,使用天貓精靈音箱進行語音控制設備。image.png

  2. 調試設備。

    使用云智能App配網綁定了您的測試設備后,可以根據下方消費者使用步驟,綁定天貓精靈,即可實現音箱的控制。下載云智能App請參見云智能App介紹

    重要

    首次注冊賬號時,國家和地區請選擇中國內地

  3. 創建一個自有App,參見創建自有App

開發Android自有App

由于天貓精靈使用淘寶賬號體系,需要在您的自有品牌App中,集成淘寶的賬號授權,從而實現和天貓精靈的對接。

  1. 調用淘寶登錄授權頁面的喚起接口。

    開發步驟如下圖所示。調用接口流程

  2. 單擊授權按鈕,進入授權界面。

    加載WebView,授權網址URL如下(需要拼接AppKey)。

    String url = "https://oauth.taobao.com/authorize?response_type=code&client_id=<項目的appKey>&redirect_uri=<控制臺定義的回調地址>&view=wap";
  3. 在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;
        }
  4. 根據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) {
    
                }
            });
        }
  5. (可選)調用接口解除綁定。

    // 用戶解綁淘寶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"}
  6. 判斷是否已綁定。

    /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中,集成淘寶的賬號授權,從而實現和天貓精靈的對接。

  1. 調用淘寶登錄授權頁面的喚起接口。

    開發步驟如下圖所示。調用接口流程

  2. 單擊授權按鈕,進入授權界面。

    加載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]]]];
    }
  3. 加載頁面成功后,使用真實的淘寶賬號登錄。

    淘寶賬號登錄

  4. 登錄成功后,處理您在控制臺填寫的回調地址。

    回調地址

    - (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,表示授權成功。此時請刷新網頁。

  5. (可選)調用接口解除綁定。

    // 用戶解綁淘寶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"}
  6. 判斷是否已綁定。

    /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;
    }