天猫精灵

更新时间:2019-11-16 11:39:55

介绍

智能人居开放平台提供了天猫精灵的快速接入能力,可以让用户使用天猫精灵控制自有品牌App上的设备和场景。
平台遵循ICA数据标准,为了确保您的设备可以被天猫精灵准确识别和控制,请确保使用标准功能。
本文针对消费者在App端、开发者在控制台的使用步骤,分别做介绍。

使用天猫精灵功能,需要三个步骤:

  1. 开发或拥有支持天猫精灵的产品(如果您是ISV,可以忽略开发的内容)
  2. ISV配置开通天猫精灵服务,开发App的授权功能
  3. 用户在App端完成授权

开发产品

确定品类

在接入天猫精灵前,需要先确定您希望使用天猫精灵控制的产品,或自主研发的IoT产品属于天猫精灵可以控制的品类。

智能人居平台接入并管理生活物联网(智能单品解决方案)的设备。可以登录生活物联网(智能单品解决方案)平台,在控制台任意创建一个产品。点击产品详情后,进入“人机交互”步骤:
image.png

在“配置APP功能”列表可以看到配置项
image.png

点击“未设置”按钮,查看天猫精灵支持的品类(持续增加中):
image.png

开通服务

如果您是IHV并准备开发支持天猫精灵语音控制的产品,可以在配置产品的“人机交互”的“天猫精灵设备”中开通。
如果您是ISV,可以忽略本节内容。

在上节的“天猫精灵”配置中,点击开通按钮即可开通这个服务。
image.png

设备调试

3.1 将测试设备证书烧录到您的测试设备中,并调试设备;
3.2 您也可以您自有品牌App,对设备进行调试。
3.3 根据文档,绑定天猫精灵App,实现音箱和设备控制的调试。

服务开通(免费)

控制台配置

如果要配置天猫精灵,要打开智能人居开放平台的控制台,从“项目管理”中选择要配置的项目,在“自有品牌APP”中选择要配置的应用。
在“三方服务”中选择天猫精灵的“快捷设置”
image.png

配置:

  • 授权时显示的App图标:上传大小尺寸为512*512的图片

  • 授权时显示的应用名称

  • 回调地址:用于完成授权后拦截authCode,实际不发生跳转。不允许使用淘系域名。

image.png

App开发

天猫精灵使用淘宝账号体系,在自有品牌App中集成淘宝的账号授权,实现和天猫精灵的对接。
淘宝登录授权页面的唤起,接口的调用开发步骤:

Android示例代码

1.点击跳转有webview的Activity,在webview中打开下面的Url 需要拼接appkey

String url = "https://oauth.taobao.com/authorize?response_type=code&client_id=" 
  + appKey 
  + "&redirect_uri=(此处填入控制台定义的回调地址)&view=wap";

2.在shouldOverrideUrlLoading中判断地址是否包含code,取到code 并传到上一界面。

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

3.根据code绑定账户代码如下:

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) {
            }
        });
    }

iOS示例代码

1、点击授权按钮,进入授权界面,加载webView

授权网址url = "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]]]];
}

2、加载页面成功,进行真实的淘宝账号登录
image.png

3、登录成功后,处理回调:


- (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 bindTaobaoIdWithParams:@{@"authCode":item.value} completion:^(NSError *err, NSDictionary *result) {
                    if (self.completion){
                        self.completion(err, result);
                    }
                    [self.navigationController popViewControllerAnimated:YES];
                }];
                break;
            }
        }
    }
}

注释:涉及接口及封装
// 用户绑定淘宝Id


+ (void)bindTaobaoIdWithParams:(NSDictionary *)para
                    completion:(void (^)(NSError *, NSDictionary *))completion{
    [self requestTmallSpeakerApi:@"/account/taobao/bind" version:@"1.0.5" params:para completion:completion];
}
此处para = @{@"authCode":@"xxxx"},其中xxxx为网页回调的code,具体查看【步骤3、登录成功后,处理回调:】
// 封装的请求类,依赖请求类#import <IMSApiClient/IMSApiClient.h>

+ (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;
        }
    }];
}

4、处理回调,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];
}
此处para = @{@"accountType":@"TAOBAO"}

6、判断是否已绑定

// 查询用户绑定的淘宝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;
}

消费者授权

使用方式如下:
1、用户拥有一台支持天猫精灵语音控制的设备,下载厂家自有品牌App,配网绑定该设备。

2、用户拥有一台天猫精灵音箱,下载“天猫精灵”App并绑定该音箱。

3、在厂家自有品牌App中,用户授权淘宝账号,输入淘宝账号密码。

4、用户在“天猫精灵”App,我的-智能家居-添加智能设备-绑定平台账号,点击“阿里智能”-“绑定账号”,即可完成授权,可以看到自有品牌App中绑定的设备。

5、完成以上步骤后,您可以通过天猫精灵音箱控制您的设备了(针对平台支持天猫精灵的品类)

参考资料

results matching ""

    No results matching ""