showLogin
微信登录,根据编译平台自动选择对应的登录实现。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.login | UniApp['login'] | 登录 API |
deps.getUserInfo | UniApp['getUserInfo'] | 获取用户信息 API(可选,App端使用) |
deps.getProvider | UniApp['getProvider'] | 获取服务提供商 API(可选,用于检查支持) |
deps.detectEnvironment | () => 'h5' | 'miniapp' | 'app' | 'unknown' | 检测环境函数(可选) |
deps.log | Console['log'] | 日志输出 |
deps.error | Console['error'] | 错误输出 |
环境要求
- UniApp环境: 使用UniApp API,支持小程序、App端
- 注意: H5端不支持微信登录
函数签名
typescript
function showLogin(
options?: LoginOptions,
deps: ShowLoginDeps
): Promise<LoginResult>
interface ShowLoginDeps {
login: UniApp['login']
getUserInfo?: UniApp['getUserInfo']
getProvider?: UniApp['getProvider']
detectEnvironment?: () => 'h5' | 'miniapp' | 'app' | 'unknown'
log: Console['log']
error: Console['error']
}
interface LoginOptions {
provider?: 'weixin' | 'qq' | 'sinaweibo' | 'xiaomi' | 'alipay' | 'baidu' | 'toutiao' | 'douyin'
extraData?: Record<string, unknown>
}
interface LoginResult {
errMsg?: string
code?: string
userInfo?: {
nickName?: string
avatarUrl?: string
[key: string]: unknown
}
raw?: unknown
}参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
options | LoginOptions | 否 | {} | 登录选项 |
options.provider | string | 否 | 'weixin' | 登录服务提供商 |
deps | ShowLoginDeps | 是 | - | 依赖注入对象 |
返回值
| 类型 | 说明 |
|---|---|
Promise<LoginResult> | Promise,成功时返回登录结果,主要包含 code(用于换取 openid/unionid) |
工作原理
- 环境检测:根据
detectEnvironment函数检测当前运行环境 - 平台适配:
- 小程序端:使用
uni.login获取 code - App端:使用
uni.login获取 code,并可选择同时获取用户信息 - H5端:不支持,直接返回错误
- 小程序端:使用
- 获取 code:调用登录接口获取临时登录凭证 code
- 返回结果:返回包含 code 的登录结果,开发者需要将 code 发送到后端换取 openid/unionid
重要提示:自2022年10月25日后,getUserProfile 接口已被收回。小程序端只能获取 code,用户头像和昵称需要使用「头像昵称填写能力」单独获取。