客户端接入指南更新时间:2026-03-05 14:48:02
一、使用说明
基于Oauth 2.0协议,提供基于系统小米账号的一键登录、授权登录能力
二、开发流程

三、使用约束
国内小米设备、最低支持Android 11
四、开发步骤
1、添加 App Id 和构建版本 Debug 标识
在应用的 AndroidManifest.xml 中添加 meta-data 配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data
android:name="com.xiaomi.xms.APP_ID"
android:value="your app id here" />
<meta-data
android:name="com.xiaomi.xms.BUILD_TYPE_DEBUG"
android:value="true or false" />
</application>
</manifest>App Id
com.xiaomi.xms.APP_ID
当开通服务时,会生成 App Id 唯一标识,用于鉴权
必须配置 App Id,调用服务时会通过 App Id 进行鉴权
构建版本 Debug 标识
com.xiaomi.xms.BUILD_TYPE_DEBUG
当前 APK 是否为 Debug 构建版本。若不配置,默认为 false
鉴权时会验证应用 apk 签名。开发调试阶段,一般不会运行 Release 签名的 apk,通常都是运行 Debug 签名 apk,为了保证在开发阶段仍然可以鉴权成功,开发者可以在平台同时添加正式证书指纹(Release 签名)和测试证书指纹(Debug 签名),用于不同场景下鉴权。
五、接口说明/API参考文档/调用方式说明
说明:每个接口有一个示例(处理完整,包括传参、正确和错误的返回值、打印等)
1、API接口文档
(1)接口概述
入口类:com.xiaomi.ecosys.account.MiAccount
| 接口名称 | 接口含义 | 接口参数 | 返回参数 | 回调函数 | 调用时机 | 是否必须调用 |
| login | 小米账号一键登录 小米账号授权登录 | Activity:当前前台Activity OAuthQuickLoginParam:登录参数,具体含义请查看结构体介绍部分 LoginCallback:登录回调接口 | 无 | onSuccess 登录完成 authCode:授权码,使用授权码前往小米账号服务端获取用户信息 state:透传字段 nonce:透传字段 onCancel 登录取消 onLoginOther onFail errorCode:一级错误码,具体含义请参考SDK错误码部分 subErrorCode:二级错误码,具体含义请参考SDK错误码部分 errorMsg:异常信息 subErrMessage:异常信息 | 同意隐私协议前提下,用户发起登录时 | 否 |
| checkLoginSupport | 校验登录环境 | Activity:当前前台Activity bizType:应用类型 0:APK应用 1:RPK快应用 loginType:登录方式 1:小米账号一键登录 2:授权登录 | 是否支持 | 无 | 同意隐私协议后前提下,发起登录之前 | 否 |
主要结构体
| OAuthQuickLoginParam | |||
| 参数名称 | 类型 | 必选 | 说明 |
| loginType | int | 是 | 登录方式 1:小米账号一键登录 2:授权登录 |
| clientId | String | 是 | 应用唯一标识,小米开放平台中注册应用后可直接获取 |
| state | String | 是 | 透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$ |
| nonce | String | 是 | 透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$ |
| phoneValid | boolean | 否 | false:无需小米账号验证手机号有效性 true:需要小米账号验证手机号有效性,如用户90天未触达过绑定手机号,此时小米账号进行手机号短信验证 默认值 true |
| privacyUrl | String | 是 | 隐私政策链接地址 |
| privacyText | String | 是 | 隐私政策文案 |
| userAgreementText | String | 是 | 用户协议文案 |
| userAgreementUrl | String | 是 | 用户协议链接地址 |
| showOtherLoginBtn | boolean | 否 | 是否显示其他登录方式按钮 默认true |
| finishAfterClickOtherLoginBtn | boolean | 否 | 点击其他登录方式按钮后是否自动关闭小米账号登录页面 默认true |
| bizType | int | 否 | 应用类型,默认0 0:APK应用,1:快应用 |
| packageName | String | 否 | 快应用包名,APK应用无需指定 |
(2)API接口明细
1. 校验登录环境
boolean loginSupport = MiAccount.getInstance().checkLoginSupport(this, 0);
2. 一键登录
// 登录回调
private final LoginCallback callback = new LoginCallback() {
@Override
public void onSuccess(String authCode, String state, String nonce) {
//登录完成
}
@Override
public void onCancel() {
//登录取消
}
@Override
public void onLoginOther() {
//其他登录方式
}
@Override
public void onFail(int errorCode, int subErrorCode, String errorMsg, String subErrMessage) {
//登录失败
}
};
//一键登录
public void quickLoginWithPhone() {
OAuthQuickLoginParam quickLoginParam = new OAuthQuickLoginParam.Builder()
.clientId("28xxxxxxxxx") //小米开放平台中注册应用后可直接获取
.loginType(1) // 登录方式,1:小米账号一键登录;2:授权登录
.state("xxxxx") //透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$
.nonce("xxxxxxx") //透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$
.privacyUrl("https://XXXX.com/XXXXX/") // 隐私政策链接地址
.privacyText("XXXXX隐私协议") // 隐私政策文案
.userAgreementUrl("https://XXXX.com/XXXXXX") //用户协议链接地址
.userAgreementText("XXXX用户协议") //用户协议文案
.build();
MiAccount.getInstance().login(this, quickLoginParam, callback);
}
3. 授权登录
// 登录回调
private final LoginCallback callback = new LoginCallback() {
@Override
public void onSuccess(String authCode, String state, String nonce) {
//登录完成
}
@Override
public void onCancel() {
//登录取消
}
@Override
public void onLoginOther() {
//其他登录方式
}
@Override
public void onFail(int errorCode, int subErrorCode, String errorMsg, String subErrMessage) {
//登录失败
}
};
//一键登录
public void quickLoginWithPhone() {
OAuthQuickLoginParam quickLoginParam = new OAuthQuickLoginParam.Builder()
.clientId("28xxxxxxxxx") //小米开放平台中注册应用后可直接获取
.loginType(2) // 登录方式,1:小米账号一键登录;2:授权登录
.state("xxxxx") //透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$
.nonce("xxxxxxx") //透传字段 开发者可自定义,字符包含0-9、a-z、A-Z、点号、冒号、斜杠、下划线等,长度限制1-255,校验规则^[0-9a-zA-Z:/\.\-_]{1,255}$
.privacyUrl("https://XXXX.com/XXXXX/") // 隐私政策链接地址,必填
.privacyText("XXXXX隐私协议") // 隐私政策文案,必填
.userAgreementUrl("https://XXXX.com/XXXXXX") //用户协议链接地址,必填
.userAgreementText("XXXX用户协议") //用户协议文案,必填
.build();
MiAccount.getInstance().login(this, quickLoginParam, callback);
}
2、错误码
| 一级错误码 | 二级错误码 | 错误码含义 | 建议的处理方式 |
| -1000 | - | 参数异常 | 校验参数 |
| -1001 | 10000 | 参数错误 | 用户点击后重新尝试发起 |
| 10001 | 应用未申请一键登录权限 | 引导用户通过其他方式登录 | |
| 10002 | 账号登录态失效 | 用户点击后重新尝试发起 | |
| 10003 | 服务端错误 | 用户点击后重新尝试发起 | |
| 10004 | 不支持该操作 | 引导用户通过其他方式登录 | |
| 10005 | 非法的登录方式 | 引导用户通过其他方式登录 | |
| 10006 | 用户未登录小米系统账号 | 引导用户通过其他方式登录 | |
| 10007 | 海外ROM不支持 | 引导用户通过其他方式登录 | |
| 10008 | 未设置锁屏 | 引导用户通过其他方式登录 | |
| 10009 | 已发起的流程中账号发生变化 | 用户点击后重新尝试发起 | |
| -1002 | - | 用户取消登录(当前页面已关闭) | 用户点击后重新尝试发起 |
| -1003 | - | 不支持的设备 | 引导用户通过其他方式登录 |
| -1004 | - | 链接小米账号App失败 | 用户点击后重新尝试发起 |
| -1005 | 1 | 跨进程请求异常-DeadObjectException,小米账号进程被杀 | 用户点击后重新尝试发起 |
| 2 | 跨进程请求异常-RemoteException,小米账号进程内异常 | ||
| 3 | 跨进程请求异常-其他Exception,小米账号进程内异常 | ||
| -1006 | -1 | 小米账号内部异常 | 用户点击后重新尝试发起 |
| 10000 | 参数错误 | 用户点击后重新尝试发起 | |
| 10001 | 应用未申请一键登录权限 | 引导用户通过其他方式登录 | |
| 10002 | 账号登录态失效 | 用户点击后重新尝试发起 | |
| 10003 | 服务端错误 | 用户点击后重新尝试发起 | |
| 10004 | 不支持该操作 | 引导用户通过其他方式登录 | |
| 10005 | 非法的登录方式 | 引导用户通过其他方式登录 | |
| 10006 | 用户未登录小米系统账号 | 引导用户通过其他方式登录 | |
| 10007 | 海外ROM不支持 | 引导用户通过其他方式登录 | |
| 10008 | 未设置锁屏 | 引导用户通过其他方式登录 | |
| 10009 | 已发起的流程中账号发生变化 | 用户点击后重新尝试发起 | |
| 30002 | 非法的一键登录intent | 用户点击后重新尝试发起 | |
| 30003 | 用户未完成登录 | 用户点击后重新尝试发起 | |
| 30004 | 当前账号不支持手机号登录 | 引导用户通过其他方式登录 | |
| 30005 | 没有权限取消一键登录 | 引导用户通过其他方式登录 | |
| -1007 | - | 上次登录未完成 | 用户点击后重新尝试发起 |
| -1008 | -1 | 小米账号版本不支持 | 引导用户通过其他方式登录 |
| -2 | XMSF版本不支持 | 引导用户通过其他方式登录 | |
| -1009 | - | 跨进程调用小米账号异常 | 引导用户通过其他方式登录 |
凡泰&快应用客户端接入指南
上一篇:开发准备
下一篇:服务端接入指南
文档内容是否有帮助?
有帮助
无帮助