团 体 标 准
T/TAF 283—2025
智能终端意图框架接口技术要求
Technical requirements for interface of intelligent terminal intent
framework
2025-06-11 发布 2025-06-11 实施
电信 终端产业协会 发布
前 言
本文件按照GB/T 1.1—2020《标准化工作导则 第 1 部分:标准化文件的结构和起草规则》的规定起草。
请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别专利的责任。
本文件由电信终端产业协会(TAF)提出并归口。
本文件起草单位:中国信息通信研究院、OPPO广东移动通信有限公司、维沃移动通信有限公司、荣耀终端股份有限公司、小米通讯技术有限公司、华为终端有限公司、蚂蚁科技集团股份有限公司、紫光展锐(上海)科技有限公司。
本文件主要起草人:解谦、樊列龙、戈志勇、曾晨曦、黄宇畅、曹宇琼、唐溯、高立发、潘斌斌、曾祥霆、曾勇波、郑钊、鲁岩、麦睿楷、史浩、林冠辰、林国涛、李琦、文军、张伟强、李丛蓉。
引 言
借助人工智能技术发展,智能助手将能够更好的理解用户意图并自动完成复杂工作,带来与触摸屏的不同使用体验,这需要终端设备与移动互联网应用、用户间建立更合适的交互方式。
意图框架提供系统级的意图体系和标准的意图接入方式,通过多维系统感知、大模型等能力构建全局意图范式,为终端与应用及服务间提供标准化的接口和协议,使得不同设备和应用软件能够遵循统一
的规范进行通信和交互。
主流终端厂商均开展意图框架产品的研发,为了保证意图框架同应用接口的统一,减少终端企业和应用企业开发适配成本,避免终端智能体生态产生碎片化,需要制定智能终端意图框架系列标准。
本文件“智能终端意图框架”系列标准之一,该系列标准的结构及名称预计如下:
——智能终端意图框架总体技术要求;
——智能终端意图框架接口技术要求。
智能终端意图框架接口技术要求
1 范围
本文件规定了智能终端意图框架接口技术要求,包括端侧技术方案和云侧技术方案两部分内容。其中端侧技术方案包括通信流程、意图注册、意图共享、意图调用、其它接口、接口安全、错误码、静态资源配置等接口相关要求。云侧技术方案包括意图注册与服务创建、接口鉴权、意图共享、意图调用等接口相关要求。
本文件适用于搭载安卓操作系统的智能终端意图框架开发、适配和测试。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
T/TAF 282—2025 智能终端意图框架总体技术要求
3 术语和定义
T/TAF 282—2025界定的术语和定义适用于本文件。
4 缩略语
下列缩略语适用于本文件。
UTF-8:8位元Unicode 转换格式(Unicode Transformation Format, 8-bit)
5 意图接口安卓端侧技术方案
5.1 安卓接口通信总览
在安卓技术方案中,应用和终端系统共同实现意图框架接口。意图框架接口在通信层使用 Content Provider 实现,应用层需要实现意图注册、共享和调用接口,接口通信总览如图 1 所示。
应用侧 终端侧
图 1 安卓接口通信总览
5.2 通信流程
5.2.1 通信流程概述
应用和终端系统之间通信支持同步和异步两种调用模式,同步的方式直接使用 Content Provider完成通信,异步的方式使用 ResultReceiver 传递响应结果。
5.2.2 同步调用接口
安卓同步接口调用流程见图 2。
应用侧 终端侧
图 2 安卓同步接口调用流程
其中:
——意图共享:应用调用 Content Provider 的 call()方法,传递方法和要共享的数据,系统收到应用共享数据后将系统响应结果立即返回给应用;
——意图调用:应用实现业务 Content Provider,并在意图注册阶段声明意图调用的 content uri路径,系统将在意图调用阶段调用应用声明的 Content Provider 的 call()方法,应用方在call()方法中按照垂域要求返回对应数据。
5.2.3 异步接口调用
异步数据返回配合 ResultReceiver 使用,ProviderClient 调用后仅返回 CallResult 结果,完整
的结果需要等待 Provider 端调用 ResultReceiver.send()方法,Client 端在 onReceiveResult()方法中处理真实的意图数据,见图 3。
图 3 安卓异步接口调用流程
5.3 意图注册
5.3.1 意图命名规则
意图命名规则见 T/TAF 282—2025 中 5.2 要求。
5.3.2 AndroidManifest.xml 配置
5.3.3 意图注册文件
intelligent_intent_config.json:
意图共享注册结构如表 1 所示。
表 1 意图共享注册结构
表 1 意图共享注册结构(续)
意图调用注册结构如表 2 所示。
表 2 意图调用注册结构
5.4 意图共享
5.4.1 意图共享概述
意图共享接口支持一次共享多个意图和单个意图,支持同步和异步两类接口,支持删除共享的意图和实体数据。示意图如图 4 所示。
图 4 意图共享逻辑示意图
5.4.2 意图共享数据结构
IntelligentIntent:意图共享的基础数据单元,应用在调用意图共享接口的时候需要传递意图共享数据,见表 3,意图共享数据示例见附录 A.1。
表 3 意图共享基础数据单元
ShareResult: 意图共享响应结果,见表 4。
表 4 意图共享响应结果
5.4.3 系统侧 Provider 声明
权限声明:
Provider 声明:
意图框架 ContentProvider 入口authorities 各系统厂家保持一致,默认值为 IntelligentIntent。该值可通过系统 settings 属性查询得到:
——adb shell 查询:
——代码查询:
5.4.4 应用端声明
AndroidManifest.xml:
5.4.5 意图共享鉴权流程
意图共享鉴权流程如图 5 所示,包括:
a) 应用在注册阶段申请意图权限,审核通过后应用与其对应的权限存储在云侧意图框架;
b) 端侧意图框架从云侧意图框架预拉取意图授权信息,并缓存到本机;
c) 业务接口调用意图框架具体接口(如意图共享);
d) 意图框架获取调用应用的包名+签名;
e) 根据包名+签名校验应用是否具备相应意图的处理权限;
f) 权限校验通过后执行具体的业务逻辑。
图 5 意图共享鉴权流程
5.4.6 共享单个意图
5.4.6.1 共享单个意图方法
通过 ContentProviderClient.call ()直接调用系统的 IntelligentIntentProvider,call 方法声明如下:
5.4.6.2 同步接口
同步接口如图 6 所示。
应用侧 终端侧
图 6 同步接口
对应 call 方法的参数见表 5。
表 5 同步接口 call 方法参数
应用示例代码见附录 A.2。
5.4.6.3 异步接口
与 同 步 调 用 方 式 一 样 , 异 步 方 式 也 是 通 过 ContentProviderClient.call () 调 用IntelligentIntentProvider 的 call()方法,不同的是,method 变更为 shareIntentAsync,传递 extra参数除了包含 IntelligentIntent 之外还需要包含 ResultReceiver 对象,call()方法的响应值为CallResult , 而 不 是 ShareResult 结 构 。 ShareResult 结 构 会 在 IntentShareReceiver 的onReceiveResult()方法中返回。异步接口示意见图 7。
应用侧 终端侧
图 7 异步接口示意图对应 call方法的参数见表6。
表 6 异步接口 call 方法参数
表 6 异步接口 call 方法参数(续)
应用示例代码见附录 A.3。
5.4.7 删除意图
5.4.7.1 删除意图的接口
删除意图包含两个接口,deleteIntent 和 deleteEntity:
——deleteIntent: 通过指定共享的意图 identifier 删除已共享的意图列表;
——deleteEntity: 删除指定实体 id 的意图实体对象。
5.4.7.2 delete Intent
通过 ContentProviderClient.call ()直接调用系统的 IntelligentIntentProvider,call 方法参数见表 7。
表 7 deleteIntent 参数
应用调用示例代码见附录 A.4。
5.4.7.3 deleteEntity
通过 ContentProviderClient.call ()直接调用系统的 IntelligentIntentProvider,call 方法参数见表 8。
表 8 deleteEntity 参数
应用调用示例代码见附录 A.5。
5.5 意图调用
5.5.1 意图调用接口
意图调用分为前台模式(foreground)、后台模式(background),调用的模式在意图注册的时候已经声 明 。 前 台 模 式 支 持 deep link 的 方 式 拉 起 应 用 ; 后 台 模 式 支 持 调 用 应 用 方 提 供 的ContentProvider.call ()接口。在意图调用的过程中会传递意图参数(InetntParams)。意图调用示意图见图 8。
图 8 意图调用逻辑示意图
5.5.2 意图参数(IntentParams)数据结构
IntentParams 是意图调用阶段传递给应用的参数,用于携带意图调用过程中的上下文信息,如intentName,parameters 等,见表 9。
表 9 意图参数数据结构
ExecuteResult: 意图调用回执,由应用传递给系统,见表 10。
表 10 意图调用回执参数
5.5.3 前台模式
对于在意图注册阶段声明的 deep link 链接,如 hap://com.xxx.xx/index, 在意图调用的时候会在 deep link 连接的后面拼接 intentParams 参数,该参数是 intentParams 的 JSON String 经过 Base64编码后的字符串。因此在调用的阶段会变成:hap://com.xxx.xx/index?intentParams=base64string 。
应用拿到该部分 intentParams 参数内容后对其进行解码,然后转换成 JSON 对象完成自己的业务逻
辑。
5.5.4 后台模式
5.5.4.1 后台模式概述
后 台 模 式 支 持 ContentProvider 方 式 将 能 力 暴 露 给 系 统 进 行 调 用 , 系 统 会 调 用 应 用 方ContentProvider 的 call 方法,应用在 call 方法中将数据按照垂域约定字段回传给系统,回传过程支持同步和异步两种接口,同步调用直接构造返回的 bundle 结果即可。
5.5.4.2 意图调用 Provider 注册
应用在注册意图调用入口的时候,注册示例如下:
call 方法的调用说明:
——authority:provider 的认证信息;
——methodName:意图调用方法名称,将会被当做 call 方法的 method 参数; ——key=value:将转换成 JSON 格式字符串,传递给 arg 参数;
——extras:将携带 IntentParams 参数信息;
——ExecteResult:意图调用响应结果应包含的数据格式。
后台意图调用参数规范见图9。
图 9 后台意图调用参数规范
5.5.4.3 同步意图调用
同步接口的调用应用在 ContentProvider 中收到 call()方法调用后,直接构造 ExecuteResult 格式的 Bundle 返回即可。决定是同步调用还是异步调用,取决于在意图注册阶段配置的 executeSync 字段值,如果该值为为 true 则为同步调用,如果该值为 false 则为异步调用。同步意图调用流程见图 10。
应用侧 终端侧
图 10 同步意图调用
应用开发示例见附录 A.6。
5.5.4.4 异步意图调用
异步接口系统会将 ExecteIntentReceiver 传递给应用,应用在规定 QoS 响应时间范围内将数据通过 ExecteIntentReceiver 的 send 方法传递给系统。异步意图调用流程见图 11。
应用侧 终端侧
图 11 异步意图调用应用开发示例见附录 A.7。
5.6 其他接口
5.6.1 概述
除了核心的意图共享、调用接口之外,还有部分工具类接口。
5.6.2 查询系统特性状态
查询系统特性状态流程见图 12。
图 12 查询系统特性状态CallResult: 查询响应结果,见表 11。
表 11 查询响应结果
系统特性状态查询包括:
——enableIntelligentIntent:查询当前系统是否开启意图框架能力,结果:
——userAcceptShareIntent:查询用户是否同意某个应用共享意图,结果:
——querySupportIntent : 查 询 当 前 系 统 支 持 的 意 图 列 表 , 参数 : [“intentName1”, “intentName2”],结果:
应用调用示例见附录 A.8。
5.6.3 getS id()
getSid()流程见图 13。
图 13 getS id()
getSid 接口用于云端意图共享阶段,意图共享需要绑定用户 ID 的场景。例如用户在端侧点外卖产生订单,后续的订单状态推进由应用云端意图共享发送到终端方云侧意图框架,终端方云侧意图框架需要知道该共享数据需要推送的具体设备,该 SID(Share Id)即终端方云侧意图框架意图共享数据推送需要关联到具体设备的标识。
CallResult: 查询响应结果,见表 12。
表 12 getS id 查询响应结果
应用调用示例见附录 A.9。
5.6.4 查询系统是否支持标准意图
通过 settings 数据库可以查询当前系统是否已支持标准意图,应用可以根据查询的结果来决定是否使能意图共享和意图调用能力。support_intelligent_intent > 0 代表当前系统已支持标准意图。
5.7 错误码
错误码见表 13。
表 13 错误码规范
5.8 静态资源配置
在意图共享和意图调用阶段,存在图片或文件等资源类型的静态资源传输,应用需要告知意图框架如何获取对应的资源。
图片支持三种数据格式:
——网络图片:使用https 地址即可,意图框架会去拉取对应的图片资源,需要注意的是:
网络图片可能会导致交互的延迟;
部分场景可能会导致网络图片加载失败影响效果(如开机启动、弱网、无网环境)。
——base64 图片:将图片数据编码成 base64 格式字符串,base64 格式数据由两部分组成,分别为头部数据和编译数据 。 只有两部分完整的数据 ,才能解析出正确的数据 。 如 : data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAACOCA
使用 base64 图片可以减少网络请求,提高加载效率,但是空间利用率低,使用该格式编码应保证图片的大小控制在 1K 内。
——应用包内图片:对应用包内图片要求如下:
应用包内图片统一使用 app://app_package/开头后接具体的路径,应保证相关资源在应用包内可被意图框架访问;
对于 android 应用支持从assets 目录下获取静态资源,写法如下:
android://com.xx.xx/assets/icon.png
对于 android 应用支持从 res 目录下获取静态资源,写法如下: android://com.xx.xx/res/icon.png
对于 android 应用支持从 FileProvider(FileProvider 是 ContentProvider 的子类,它让应用间共享文件变得更加容易。应用需要实现 FileProvider 共享文件,并授予 URI 访问权限)获取静态资源,写法如下:
content://URI
6 意图接口云端技术方案
6.1 概述
云端意图接入包含意图注册、意图共享和意图调用三部分。
6.2 意图注册与服务创建
在意图注册之前需要创建终端方意图框架云服务,并生成应用的 client_id 和 client_secret。意图注册在终端方云端开发平台完成,需要填写的内容见表 14。
表 14 云端意图注册内容
表 14 云端意图注册内容(续)
6.3 接口鉴权
6.3.1 接口鉴权方式
为了保证云端数据传输安全,云端的接口调用需要做认证。意图共享和意图调用采用 OAuth 方式鉴权。
6.3.2 意图共享鉴权
6.3.2.1 意图共享鉴权流程
意图共享是应用云端与终端方云侧意图框架直接通信,调用方向为 应用云端 --> 终端方云侧意图框架,为保证调用安全,在调用过程中需要携带有效 access_token,流程见图 14,包括:
a) 应用向终端方申请意图成功后,会生成 client_id 和 client_secret;
b) 应用云端调用终端方云侧意图框架 token 获取接口,获取 access_token;
c) 后续业务需要携带 access_token,且内容需要按照约定的规则签名。
图 14 意图共享鉴权
6.3.2.2 access_token 获取
调用业务接口前需先获取授权 token (access_token),用于后续参数签名,应用开发者需要进行妥善保存。access_token 的有效期通过字段 expire_in 来标识,默认为 2 小时 (7200 秒)有效。
重复调用获取 token 的接口,会将上一次获取的 token 的剩余有效期置为 5 分钟 (300 秒)。
接口说明:
——请求路径: /intent/oauth2/v1/token;
——请求方法: GET;
——请求头:Content-type: x-www-form-urlencoded。
请求参数见表 15。
表 15 access_token 获取请求参数
响应体见表 16。
表 16 access_token 获取响应体
表 16 access_token 获取响应体(续)
错误码见表 17。
表 17 access_token 获取错误码
响应体示例见附录 A.10。
6.3.2.3 数据签名
应用云端在请求时需要添加如表 18 所示请求头。
表 18 数据签名请求头
签名逻辑的输出结果用来填充 X-Api-Sign 字段,发起请求前需要对参数进行签名,云侧意图框架会对应用云端请求数据进行校验,签名规则如下:
a) 所有请求参数按照 ASCII 升序排序;
b) 请求参数使用&拼接字符串,值为null 的参数不参与签名,拼接成 k1=v1&k2=v2;
c) 将 access_token 、时间戳、随机数与第 2 步中的字符串按指定格式拼接;
d) 对第 3 步得到的字符串进行 HmacSHA256 计算,计算时使用的密钥 key 为获取使用的client_secret;
e) 将 hash 计算结果转换为小写 16 进制字符串,得到签名 sign。
当请求 Body 为 JSON 时,签名时取第一层字段排序签名,值为数组或 Map 的第一层字段,值转换为
JSON 字符串。
预签名字符串格式为:
access_token=${access_token}×tamp=${timestamp}&nonce=${nonce} + body 参数按 key 排序后拼接。
签名代码逻辑示例见附录 A.11。
6.3.3 意图调用鉴权
意图调用接口鉴权支持 OAuth 接口方式鉴权,在意图注册的时候需要填写应用方服务器鉴权接口信息,见表 19。
表 19 意图调用鉴权接口信息
意图调用鉴权是应用云端对云侧意图框架的调用进行鉴权,流程见图 15,描述如下:
a) 应用开发者在应用云端申请账号,并获取账号对应的 client_id 和 client_secret;
b) 应用开发者在终端系统根据意图注册的注册规范填写 client_id 和 client_secret 等信息;
c) 云侧意图框架在发起意图调用前向应用云端发起调用请求 access_token;
d) 云侧意图框架根据 access_token 的有效时间对 access_token 进行缓存;
e) 云侧意图框架按照应用云端授权接口要求和垂域字段要求,构造意图调用请求;
f) 云侧意图框架向应用云端发起意图调用请求,应用云端根据垂域规范返回结构化数据。
图 15 意图调用鉴权
6.4 意图共享
6.4.1 共享单个意图
6.4.1.1 共享单个意图概述
意图根据面向的人群不同,可以分为面向特定人群的事件共享和面向指定用户的用户共享:
——事件共享:该类共享面向特定人群,比如在天气异常的时候提醒某个特定区域内的所有用户
——用户共享:该类共享面向某个特性用户,如外卖点餐进度提醒,需要应用方服务账号与终端方账号进行绑定。
这两类共享均使用同一接口:
——请求路径:/intent/v1/shareIntent;
——请求方法:POST;
——请求头:
• Content-type: application/json;
• Authorization: 88F5CEZsArO wBhS;
• X-Client-Send-Utc-Ms: 1729654789000;
• X-Nonce: 15;
• X-Api-Sign: 88f5 a012;
• X-Api-Sign-Type: sort。 ——请求体:
intelligentIntent: 填写意图共享内容,参考 IntelligentIntent 数据结构。 target 类型分为两种 group 和 user 分别对应事件共享和用户共享两种类型:
——事件共享:
——用户共享:
指定用户共享需要携带用户标识 targetId,该标识需要通过账号绑定获取流程。
6.4.1.2 账号绑定流程 1(应用方记录映射关系)
意图框架端侧提供获取 SID(ShareId)接口,在云端用户意图共享场景,需要知道意图数据推送
给某台具体设备。流程见图 16,包括:
a) 应用端侧调用 getSid 接口获取 SID;
b) 应用端侧业务触发(如有订单产生)将 SID 传递给应用云侧,并在应用云侧完成事件 SID 与应用用户账号的绑定;
c) 应用方云侧意图共享数据的时候携带SID;
d) 云侧意图框架收到应用云侧共享的数据后适时将数据下发到用户端侧意图框架;
e) 端侧意图框架决定在合适的入口推出服务卡片。
图 16 账号绑定流程 1响应体字段见表 20,示例见附录 A.12。
表 20 账号绑定流程 1 响应体
6.4.1.3 账号绑定流程 2(终端方记录映射关系)
由终端方绑定应用账号,需要用户授权,绑定关系记录在终端方,基本流程见图 17。
图 17 账号绑定流程 2
此场景在意图共享阶段,需要传递的应用账号为绑定阶段返回给终端系统的账号信息,方法如下:
6.4.2 意图删除接口
6.4.2.1 delete Intent
请求路径: /intent/v1/deleteIntent
请求方法: POST
请求头:
Content-type: application/json
Authorization: 88F5CEZsArO…wBhS
X-Client-Send-Utc-Ms: 1729654789000
X-Nonce: 15
X-Api-Sign: 88f5…a012
X-Api-Sign-Type: sort请求体:
参数说明见表 21。
表 21 deleteIntent 参数
响应体见表 22。
表 22 deleteIntent 响应体
错误码见表 23。
表 23 deleteIntent 错误码
6.4.2.2 deleteEntity
请求路径: /intent/v1/deleteEntity
请求方法: POST
请求头:
Content-type: application/json
Authorization: 88F5CEZsArO…wBhS
X-Client-Send-Utc-Ms: 1729654789000
X-Nonce: 15
X-Api-Sign: 88f5…a012
X-Api-Sign-Type: sort请求体:
参数说明见表 24。
表 24 deleteEntity 参数
响应体见表 25。
表 25 deleteEntity 响应体
错误码见表 26。
表 26 deleteEntity 错误码
6.5 意图调用接口
云侧意图调用传递由终端方云侧意图框架调用应用云端,调用接口由应用开发者在意图注册的时候声明接口 https 入口,接口调用规则如下:
——调用的接口method 为 GET;
——url路径允许拼接意图上下文参数,拼接形式为
intentParams=base64(JSONString(IntentParams))。
意图上下文定义 IntentParams 见表 27。
表 27 意图上下文参数
表 27 意图上下文参数(续)
返回数据格式见表 28。
表 28 意图调用返回数据格式
附 录 A
(资料性)
数据和代码示例
A.1 意图共享数据示例
图 A.1 打车示意图
意图注册:
意图共享:
A.2 同步接口call方法代码示例
A.3 异步接口call方法代码示例
继承 ResultReceiver 类,重写 onReceiveResult 方法:
调用异步共享:
A.4 deleteIntent方法示例
A.5 deleteEntity方法示例
A.6 同步意图调用代码示例
AndroidManifest.xml:
A.7 异步意图调用代码示例
AndroidManifest.xml:
编写意图调用的 ContentProvider,如:MyNavigationIntentProvider.kt:
receiver.send (1, Bundle().apply {
putString ("result", JSONObject().apply {
putInt ("code", 1)
putString ("message", "has no permission")
putString ("requestId", requestId)
}.toString())
})
return Bundle();
}
// 2. 解析参数
// 2.1 获取意图上下文内容
val intentParams = JSONObject (extras!!.getString ("intentParams"))
// 2.3 处理查询导航路线意图
if (method == "Navigation.QueryNavigation" && !isSync ) { // 2.3.2 异步执行业务逻辑
Thread({
queryNavigationAsync (intentParams, callId, receiver) }).start()
// 2.3.3 返回
return Bundle()
} else if (method == "Navigation.SearchArround" && isSync) { // 2.4 处理搜索周边意图
...
} else {
// 2.5 不支持场景
receiver.send (2, Bundle().apply {
putString ("result", JSONObject().apply {
putInt ("code", 2)
putString ("message", "not support")
putString ("requestId", requestId)
}.toString())
})
}
return Bundle()
}
/*
* 2.6 异步处理业务逻辑并返回*/
private fun queryNavigationAsync ( intentParams: JSONObject,
A.8 查询系统特性状态代码示例
A.9 getSid()方法示例
A.10 access_token响应体示例
A.11 签名代码逻辑示例
String nonce,
String secret,
Map paramsMap){
// 对 key 排序
List keysList = new ArrayList<>(paramsMap.keySet());
Collections.sort (keysList);
// 拼接待签名字符串
List paramList = new ArrayList<>();
for (String key : keysList) {
Object object = paramsMap.get (key);
if (object == null){
continue ;
}
String value = key + "=" + object;
paramList.add (value);
}
String s = "access_token="+accessToken+"×tamp="+timestamp+"&nonce="+nonce;
if(!paramList.isEmpty()){
String signStr = String.join ("&", paramList);
s = s + "&" +signStr ;
}
// hmacSHA256 签名
return hmacSHA256 (s, secret); }
/**
* HMAC_SHA256 计算签名
* @param data 需要加密的参数
* @param key 签名密钥
* @return String 返回加密后字符串*/
public static String hmacSHA256 (String data, String key) {
try {
byte[] secretByte = key.getBytes (Charset.forName ("UTF-8"));
SecretKeySpec signingKey = new SecretKeySpec (secretByte, "HmacSHA256");
Mac mac = Mac.getInstance ("HmacSHA256");
mac.init (signingKey);
byte[] dataByte = data.getBytes (Charset.forName ("UTF-8"));
byte[] by = mac.doFinal (dataByte);
return byteArr2HexStr (by);
} catch (Exception e) {
e.printStackTrace();
A.12 账号绑定流程1响应体

评论