一、接入流程
- 第一步: 开发者侧服务端调用【应用在架版本查询接口】获取应用在架版本号
- 第二步: 拼接market协议构建跳转链接, 开发者侧客户端通过market协议引导用户跳转至应用商店更新
二、应用在架版本查询接口操作指南
1、作用
获取应用在小米应用商店的在架版本号。
2、各类编程语言接口示例
3、协议
3.1、采用协议
HTTP1.1,所有请求均使用POST 方式;
3.2、数据格式
请求应答数据均使用JSON 格式,采用UTF-8 编码;
3.3、传递请求参数规范
对于需要明确传递请求参数的接口,要求进行安全验证。此时请求中需要传递的参数:
- 使用RequestData 参数传递请求的JSON 字符串,具体格式见各个接口定义
- 附件(apk文件、icon图片以及截图等)按照具体接口的规定传递
- 使用SIG 参数传递请求参数的数字签名
这里看不懂没关系,后续接口部分会给出详细解释。
3.4、SIG 数字签名的生成方法
步骤一:计算每个参数的MD5 值(若参数为文件则计算整个文件的MD5 值);
步骤二:将各个参数及其对应的MD5 值按照下面示例格式组成JSON 数组,同时传递接口平台分配的访问密码;
访问密码:api接口的访问密码是私钥(私钥获取参考步骤三),非开发者帐号登录密码;另外每次点击重置私钥后,开发者站都会更新私钥,公钥不变。
- 将生成的数字签名转换为小写16 进制字符串
示例:
{"password":"访问密码", "sig":[ {"name":"parameterName1","hash":"MD5(名称为parameterValue1的文件)"}, {"name":"parameterName2","hash":"MD5(名称为parameterValue2的文件)"}]}
SIG的计算方式看不懂暂时没关系,后续具体接口部分还会给出详细的解释。
步骤三:使用小米应用商店分配的公钥:对生成的JSON 串进行RSA 数字签名,RSA 签名使用RSA/NONE/PKCS1Padding 方式;
以下是获取公钥、私钥的操作流程:


注意:私钥重置会导致原私钥失效,公钥加密方式可以参考文档头部的示例代码。
4、接口
地址:https://api.developer.xiaomi.com/devupload(此为接口地址,非网址)
4.1、应用包查询接口
通过应用包名查询小米应用商店内您应用的最新在架版本。
请求体
请求地址:/dev/query:
接口参数:
参数名 | 可选性 | 类型 | 说明 |
RequestData | 必选 | json | 具体字段信息见下 |
SIG | 必选 | string | 加密串,如何计算具体见下 |
RequestData的参数:
参数名 | 可选性 | 类型 | 说明 |
packageName | 必选 | string | 应用包名 |
userName | 必选 | string | 用户名,在小米开发者站登录的邮箱。 |
SIG计算方法:
首先拼接json字符串:{"sig":[{"name":"RequestData","hash":"RequestData json字符串的md5 32位小写值"}],"password":"小米账号密码或者私钥"},然后通过公钥加密获取结果字符串即可。
请求示例
这里给出cURL和Postman两种示例可供参考。
cURL示例:
curl --location 'https://api.developer.xiaomi.com/devupload/dev/query' \
--form 'RequestData="{\"packageName\":\"com.test.myapplication360\",\"userName\":\"pengchen3@xiaomi.com\"}"' \
--form 'SIG="6767339b279975cf5af2e499c25240d7d2cb84e5c30283a7e5b95c5e5c2844ad82399b2352e82a8335a5e67b771304e778a040d62c3353da807b1e0a8b398e4862e7b6288be80bf5a4c1065269c29fdfda27b4f4d1578ac21f96acf8a5b25fb4b8fcfa161edfd5513a6683d9c0d42fc2a6d55745ac99156a56f90d7748b648726a824a643286b5db5d5621607e2e55116d5f8ffe478fe982861cf1d48a1edde895fe16929c6f9de361787da9d75adfe031cd29c313f85f84a5588bdfdf086fdc48c5ed3d6545bc13099a5acd8301ea55ae40ddc5dabbe4ec5bcbd34bc5d15c74c577b3e3f57ab9883d5075975f2e18d632af6e3c7b6b6349ea35d1d1dd3e9f29"'
Postman示例:

返回结果
参数名 | 可选性 | 类型 | 说明 |
result | 必选 | int | 0:表示成功,非0 表示查询失败,其中-7 表示包名被其他开发者占用,需要进行认领 |
packageInfo | 可选 | object | 应用包详细信息,如果为空表示不存在相应包,具体信息见下 |
create | 可选 | boolean | 是否允许新增该包名的应用 |
updateVersion | 可选 | boolean | 是否允许应用版本更新 |
updateInfo | 可选 | boolean | 是否允许应用信息更新 |
message | 可选 | string | 响应消息 若为正常响应则可为空,若非正常响应则返回错误信息 |
packageInfo信息:
参数名 | 类型 | 说明 |
appName | string | 应用名 |
versionName | string | 版本名 |
versionCode | long | 版本号 |
onlineVersionCode | long | 在架版本号,为0时代表应用没有在架 |
packageName | string | 包名 |
返回示例:
{ "result": 0, "updateVersion": false, "updateInfo": false, "create": true, "message": "查询成功", "packageInfo": { "appName": "com.test.myapplication360", "packageName": "com.test.myapplication360", "versionCode": 1, "versionName": "1.0.0","onlineVersionCode": 1 } }
5、FAQ
Q:是否有测试环境或者沙盒环境可供接口调用?
A:暂时没有开放,可以线上调试推送应用,成功后,在开放平台页面撤回审核即可。
Q:每日是否有接口调用次数限制?
A:对过高的请求会限制调用(允许的QPS<1)。
三、构建跳转链接的方式
开发者通过market协议拉起应用商店详情页,以实现版本升级。market协议格式如下:
仅支持在自更新场景下,跳转应用详情页
market://details?id=pkgName
注:只有在小米应用商店已上架的应用,方可使用该能力
调用时需同时加上以下两个flag:
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP)
intent.addFlags(FLAG_ACTIVITY_NEW_TASK)