【快应用&凡泰】客户端开发指南更新时间:2026-03-05 09:50:00

一、【快应用】开发接入小米账号服务

1.接口介绍

快应用框架版本需要大于1.31.4.0
快应用调起一键登录/授权登录界面,用户确认后获取授权码,应用服务端根据授权码获取用户信息。
如果没登录系统账号,调用接口后会跳转登录小米账号的页面。 账号登录成功后自动跳转一键登录/授权登录界面。
一键登录可获取小米账号关联的手机号、openId信息、unionId信息。
授权登录可获取到小米账号的openId信息、unionId信息

1.1 应用获取信息流程

1.2 前端说明

接口声明

{ "name": "service.account" }

导入模块

import account from '@service.account' 或 const account = require('@service.account')

一键登录/授权登录接口 account.unifiedLogin()

一键登录/授权登录用同一个接口,通过loginType区分类型。
成功后返回授权码authCode。

参数:

参数名类型必填说明
loginType'AUTH_LOGIN' | 'QUICK_LOGIN'QUICK_LOGIN:一键登录AUTH_LOGIN:授权登录
clientIdString快应用开发者在开放平台注册的clientId
privacyUrlString业务隐私协议地址
privacyTextString业务隐私协议文案
userAgreementUrlString用户协议地址
userAgreementTextString用户协议文案
stateString开发者自定义请求状态标识,用于防止 CSRF 攻击
nonceString一次性随机字符串,用于防止重放攻击
phoneValidBoolean是否需要小米账号校验手机号有效性true:需要校验(默认)false:不校验
showOtherLoginBtnBoolean是否展示“其他方式登录”按钮默认 false
successFunction成功回调
failFunction失败回调
completeFunction执行结束后的回调

success 返回值:

参数名类型说明
authCodeString返回的授权码。

应用前端代码示例

回调写法

    account.unifiedLogin({
loginType: 'QUICK_LOGIN',
clientId: 'yourclientId',
state: 'xxx',
nonce: 'xxx',
privacyUrl: 'xxx',
privacyText: 'xxx',
userAgreementUrl: 'xxx',
userAgreementText: 'xxxx',
success: (data) => {
console.log('handling success', data)
},
fail: (data, code) => {
console.log(`handling fail`, data, code)
},
complete: (data, code) => {
console.log(`handling complete`, data, code)
},
})

promise写法

        try {
let res = await account.unifiedLogin({
loginType: 'QUICK_LOGIN',
clientId: 'yourclientId',
state: 'xxx',
nonce: 'xxx',
privacyUrl: 'xxx',
privacyText: 'xxx',
userAgreementUrl: 'xxx',
userAgreementText: 'xxxx',
})
console.log('res', res)
} catch (error) {
console.log('error', error)
}

二、【凡泰】开发接入小米账号服务

1.客户端接口

1.1 登录接口

支持以下两种登录模式:

  • quickLogin一键登录
  • authLogin授权登录

1.2 接口定义

wx.isSupportMiLogin()

用于查询是否支持小米的一键登录和授权登录。

参数:Object

字段名类型必填说明
typeString需要判断的登录类型,支持quickLogin或authLogin

返回值:Object

字段名类型说明
dataBoolean是否支持登录功能
errMsgString成功或错误信息

示例:

const res = wx.isSupportMiLogin({type: 'quickLogin'})
console.log(`--- wx.isSupportMiLogin --- ${res.data}`) // true/false

wx.quickLogin(object)/wx.authLogin(object)

一键登录和授权登录方式的参数、回调事件和返回值完全一样。

参数:Object

字段名类型必填说明
clientIdString快应用开发者在开放平台注册的clientId
privacyUrlString业务隐私协议地址
privacyTextString业务隐私协议文案
userAgreementUrlString用户协议地址
userAgreementTextString用户协议文案
stateString开发者自定义请求状态标识,用于防止 CSRF 攻击
nonceString一次性随机字符串,用于防止重放攻击
phoneValidBoolean是否需要小米账号校验手机号有效性true:需要校验(默认)false:不校验
showOtherLoginBtnBoolean是否展示“其他方式登录”按钮默认 false

  • state / nonce 校验规则说明:
    • 长度:1~255
    • 字符集:
0-9 a-z A-Z . : / - _
  • 正则表达式:
^[0-9a-zA-Z:/.\-_]{1,255}$
  • phoneValid 说明:
    • phoneValid = true(默认):
    • 如用户90天未触达过绑定手机号,小米账号进行手机号短信验证
    • phoneValid = false
    • 不进行手机号有效性校验

  • showOtherLoginBtn 说明:
    • false(默认)
    • 不展示「其他方式登录」按钮
    • true
    • 展示「其他方式登录」按钮
    • 用户点击后:
      • 当前登录页关闭
      • 触发 onLoginOther 回调
      • 后续登录流程需由开发者自行实现

返回值:Object

字段名类型说明
authCodeString授权码,用于向服务端换取 Access Token / Refresh Token
stateString原样返回的请求状态标识
nonceString原样返回的一次性随机字符串

回调事件:
由于凡泰只支持success和fail回调,因此通过在返回数据中添加type字段区分不同回调类型

  • success: success/loginOther
  • fail: error/cancel

回调方法:

success | fail

回调类型定义:
1.登陆成功

type: success

返回参数:

{
"type": "success/loginOther",
"data": {
"authCode": "xxx",
"state": "login_state_001",
"nonce": "nonce_001"
} // 如果是loginOther回调data为空
}

参数说明:

字段名类型说明
authCodeString授权码,用于向服务端换取 Access Token / Refresh Token
stateString原样返回的请求状态标识
nonceString原样返回的一次性随机字符串

2.用户取消登录

用户主动关闭登录页或返回

type: cancel

3.用户选择其他方式登录

仅在 showOtherLoginBtn = true 且用户点击时触发

type: loginOther

4.登陆失败

type: error

返回参数:

{
"type": "error/cancel",
"errCode": "10001", // 如果是onCancel回调,errCode为空
"errMsg": "用户未授权"
}

参数说明:

字段名类型
typeString
errorCodeString
errorMsgString

errorCode含义:

一级错误码二级错误码错误码含义建议的处理方式
-1000-参数异常校验参数
-100110000参数错误用户点击后重新尝试发起
10001应用未申请一键登录权限引导用户通过其他方式登录
10002账号登录态失效用户点击后重新尝试发起
10003服务端错误用户点击后重新尝试发起
10004不支持该操作引导用户通过其他方式登录
10005非法的登录方式引导用户通过其他方式登录
10006用户未登录小米系统账号引导用户通过其他方式登录
10007海外ROM不支持引导用户通过其他方式登录
10008未设置锁屏引导用户通过其他方式登录
10009已发起的流程中账号发生变化用户点击后重新尝试发起
-1002-用户取消登录(当前页面已关闭)用户点击后重新尝试发起
-1003-不支持的设备引导用户通过其他方式登录
-1004-链接小米账号App失败用户点击后重新尝试发起
-10051跨进程请求异常-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小米账号版本不支持引导用户通过其他方式登录
-2XMSF版本不支持引导用户通过其他方式登录
-1009-跨进程调用小米账号异常引导用户通过其他方式登录

示例:

// 一键登录
wx.quickLogin({
"clientId": "288230376152047****",
"state": "login_state_***",
"nonce": "nonce_***",
"privacyUrl": "https://privacy.mi.com/*******",
"privacyText": "小米账号隐私协议*****",
"userAgreementUrl": "https://privacy.mi.com/*****",
"userAgreementText": "小米账号用户协议*****",
"showOtherLoginBtn": true,
"phoneValid": false,
success: (res) => { // 成功回调
// 根据 res.type 区分不同场景
// res = {type: 'success'/'loginOther', ...otherData}
if (res.type === 'success') {
this.log('--- wx.quickLogin --- success', res)
} else if (res.type === 'loginOther') {
this.log('--- wx.quickLogin --- loginOther', res)
}
},
fail: (res) => { // 失败回调
// 根据 res.type 区分不同错误场景
// res = {type: 'cancel'/'error', errMsg: '', errCode: 0}
if (res.type === 'cancel') {
this.log('--- wx.quickLogin --- cancel', res)
} else if (res.type === 'error') {
this.log('--- wx.quickLogin --- fail', res)
}
}
})

// 授权登录
wx.authLogin({
"clientId": "288230376152047****",
"state": "login_state_***",
"nonce": "nonce_***",
"privacyUrl": "https://privacy.mi.com/*******",
"privacyText": "小米账号隐私协议*****",
"userAgreementUrl": "https://privacy.mi.com/*****",
"userAgreementText": "小米账号用户协议*****",
"showOtherLoginBtn": true,
"phoneValid": false,
success: (res) => { // 成功回调
// 根据 res.type 区分不同场景
// res = {type: 'success'/'loginOther', ...otherData}
if (res.type === 'success') {
this.log('--- wx.quickLogin --- success', res)
} else if (res.type === 'loginOther') {
this.log('--- wx.quickLogin --- loginOther', res)
}
},
fail: (res) => { // 失败回调
// 根据 res.type 区分不同错误场景
// res = {type: 'cancel'/'error', errMsg: '', errCode: 0}
if (res.type === 'cancel') {
this.log('--- wx.quickLogin --- cancel', res)
} else if (res.type === 'error') {
this.log('--- wx.quickLogin --- fail', res)
}
}
})
文档内容是否有帮助?
有帮助
无帮助