设备激活接口
一、设备激活接口
如果您需要获取DeviceName,就需要走设备激活流程,请求设备激活接口。
1.1 设备激活接口简介
设备使用前必须的鉴授权环节,设备通过此接口,与DUI产品绑定并获得鉴权秘钥(device profile),后续基于鉴权秘钥与云端进行语音对话请求。设备方需要妥善保管鉴权秘钥,如丢失可调用此接口进行重新获取,重新获取的秘钥与原来的秘钥不相同,且原秘钥会失效。
1.2 接口详情
1.2.1 请求地址
https://auth.dui.ai/auth/device/register
1.2.2 请求类型
接口请求类型为:POST
1.2.3 请求参数
Headers
参数名 | 参数值 | 是否必须 |
Content-Type | application/json | 是 |
Query
参数名 |
是否必须 |
示例 | 备注 |
productKey | 是 | 0d397453dd94dd87788888888260c8cb | 来自dui控制台,产品授权管理页面 |
format | 是 |
plain |
传入plain即可 |
productId | 是 | 100000001 | 产品id,来自dui控制台,产品授权管理页面 |
timestamp | 是 | 1546059559999 | unix时间戳(毫秒) |
nonce | 是 | bf7c8674 | 随机字符串,32字符以内 |
sig | 是 | 0ddddddddd94dd87788888888260c8ab | 签名,对query parameter中的参数按照预先约定的顺序排序 (productKey + format+ nonce + product id + timestamp),然后基于product secret对参数做签名:hmacsha1(productSecret,productKey + format+ nonce + product id + timestamp) ,本文末尾有签名示例代码。 |
Request Body
request body中通过json格式上报设备信息,上报到思必驰的设备信息有三个作用:
1)确认设备的唯一性(针对各种设备的必填字段)
2)方便后续针对不同类型的设备进行优化(针对各种设备的选填字段)
3)查询统计分析,方便客户按照不同维度统计自己设备的激活情况
1.2.4 android设备
名称 | 类型 |
是否必须 |
字段说明 |
示例 |
platform | string | 是 |
平台类型,android设备填android即可 |
android |
deviceId | string | 是 | 设备ID | 5235894f-3028-33f4-a948-c86549cc4808 |
packageName | string | 是 | 包名 | com.aispeech.dui.demo |
applicationLabel | string | 否 | 应用名称 | DUI Demo |
applicationVersion | string | 否 | 版本 | 0.1.0-20171031163815 |
buildVariant | string | 是 | 构建类型: debug 或 release | release |
buildSdkInt | string | 否 | framework level | 19 |
displayMatrix | string | 是 | 屏幕分辨率 | 720*1280 |
buildModel | string | 是 | 型号 | Coolpad 8675 |
buildManufacture | string | 是 | 制造商 | XiaoMi |
buildDevice | string | 是 | 设备名称 | 8675 |
imei | string | 否 | IMEI号 | 356704081123748 |
mac | string | 否 | MAC地址 | 44:45:53:54:00:00 |
androidId | string | 否 | Android ID | 9774d56d682e549c |
1.2.5 iOS设备
名称 | 类型 | 是否必须 |
字段说明 |
备注 |
platform | string | 是 |
平台类型,ios设备填ios即可 |
ios |
deviceId | string | 是 | 设备ID | 0060D69C-AB7A-44E9-8754-7A12EC2AEDAD |
packageName | string | 是 | 包名 | com.aispeech.dui.demo |
applicationLabel | string | 否 | 应用名称 | DUI Demo |
applicationVersion | string | 否 | 版本 | 0.1.0-20171031163815 |
buildSdkInt | string | 否 | framework level | level 19 |
displayMatrix | string | 否 | 屏幕分辨率 | 750x1334 |
buildModel | string | 是 | 型号 | iPhone 6 |
buildManufacture | string | 是 | 制造商 | Apple |
buildDevice | string | 是 | 设备名称 | iPhone |
1.2.6 嵌入式
名称 |
类型 |
是否必须 |
字段说明 |
备注 |
platform | string | 是 |
平台类型,嵌入式设备填嵌入式操作系统或芯片型号即可 |
linux |
deviceName | string | 是 | 设备名称,要求是接入方所有设备中唯一的一个字段,比如mac地址、uid号等 | 0060D69C-AB7A-44E9-8754-7A12EC2AEDAD |
instructionSet | string | 否 | 指令集 | armv6 |
chipModel | string | 否 | 芯片型号 | RK3308 |
1.2.7 正确返回示例
{
"deviceInfo": {
......
},
"deviceName": "0000-0001",
"deviceSecret": "1518b5f911864150a092ba6952be534d",
"productId": "666666"
}
1.2.8 错误返回示例
{
"errId": 401,
"error": "signature mismatch."
}
1.2.9 通用http status解释
- 200 ok
- 400 请求错误
- 401 因为权限问题激活失败
- 500 内部系统错误
1.2.10 特别说明
嵌入式设备的请求body里,deivceName字段,需要有唯一性保证,否则如不同设备使用相同的deviceName,第二个激活的设备会使第一个激活设备的设备秘钥失效,可能会对用户体验造成不确定的影响。
1.2.11 附录 签名代码示例
JAVA
String content = productKey + format + nonce + productId + timestamp;
String signature = SecureUtil.hmacSha1(productSecret).digestHex(content);