uni-app 离线打包 一键登录后 登录弹窗无法关闭
uni-app 离线打包 一键登录后 登录弹窗无法关闭
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 无 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.76
手机系统:Android
手机系统版本号:Android 15
手机厂商:OPPO
手机机型:oppo find X6 pro
页面类型:vue
vue版本:vue3
打包方式:离线
示例代码:
uni.login({
provider: ‘univerify’,
univerifyStyle: { // 自定义登录框样式
//参考univerifyStyle 数据结构
“fullScreen”: false, // 是否全屏显示,默认值: false
“title”: ‘快速登录’,
“backgroundColor”: “#ffffff”, // 授权页面背景颜色,默认值:#ffffff
“backgroundImage”: “static/bg.png”, // 全屏显示的背景图片,默认值:"" (仅支持本地图片,只有全屏显示时支持)
“phoneNum”: {
“color”: “#000000”, // 手机号文字颜色 默认值:#000000
“fontSize”: “28” // 手机号字体大小 默认值:18
},
“icon”: {
“path”: “static/logo.png”, // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo
“width”: “84px”, //图标宽度 默认值:60px
“height”: “70px” //图标高度 默认值:60px
},
“slogan”: {
“color”: “#8a8b90”, // slogan 字体颜色 默认值:#8a8b90
“fontSize”: “12” // slogan 字体大小 默认值:12
},
// 一键登录
“authButton”: {
“normalColor”: “#fa6b29”, // 授权按钮正常状态背景颜色 默认值:#3479f5
“highlightColor”: “#fa6b29”, // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
“disabledColor”: “#faa332”, // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
“textColor”: “#ffffff”, // 授权按钮文字颜色 默认值:#ffffff
“title”: “登录账号”, // 授权按钮文案 默认值:“本机号码一键登录”
“borderRadius”: “12px”, // 授权按钮圆角 默认值:“24px” (按钮高度的一半)
},
// 其他登录方式
“otherLoginButton”: {
“visible”: “true”, // 是否显示其他登录按钮,默认值:true
// “normalColor”: “#f8f8f8”, // 其他登录按钮正常状态背景颜色 默认值:#f8f8f8
// “highlightColor”: “#dedede”, // 其他登录按钮按下状态背景颜色 默认值:#dedede
“textColor”: “#333”, // 其他登录按钮文字颜色 默认值:#000000
“title”: “更多登录方式”, // 其他登录方式按钮文字 默认值:“其他登录方式”
“borderWidth”: “1px”, // 边框宽度 默认值:1px(仅ios支持)
“borderColor”: “#c5c5c5” //边框颜色 默认值: #c5c5c5(仅ios支持)
},
// 自定义按钮登录方式
“buttons”: { // 仅全屏模式生效,配置页面下方按钮 (3.1.14+ 版本支持)
“iconWidth”: “45px”, // 图标宽度(高度等比例缩放) 默认值:45px
“list”: [{
“provider”: “apple”,
“iconPath”: “/static/test.png”, // 图标路径仅支持本地图片
},
{
“provider”: “weixin”,
“iconPath”: “/static/test.png”,
}
]
},
“privacyTerms”: {
“defaultCheckBoxState”: “false”, // 条款勾选框初始状态 默认值: true
“textColor”: “#8a8b90”, // 文字颜色 默认值:#8a8b90
“termsColor”: “#FC6F2A”, // 协议文字颜色 默认值: #1d4788
“prefix”: “我已阅读并同意”, // 条款前的文案 默认值:“我已阅读并同意”
“suffix”: “并使用本机号码登录”, // 条款后的文案 默认值:“并使用本机号码登录”
“fontSize”: “12”, // 字体大小 默认值:12,
“privacyItems”: [
// 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效
{
“url”: “https://mp.oss.xiangzuhao.com.cn/uploads/fuwuxieyi.html”, // 点击跳转的协议详情页面
“title”: “用户协议” // 协议名称
},
{
“url”: “https://mp.oss.xiangzuhao.com.cn/uploads/yinsizhengce.html”, // 点击跳转的协议详情页面
“title”: “隐私协议” //
}
]
}
},
async success(res) {
uni.hideLoading();
// 登录成功
let param = {
accessToken: res.authResult.access_token,
openId: res.authResult.openid,
device: “app”,
}
try {
let login = await oneClickLogin(param)
let {
token
} = login
utils._setStorage(‘token’, token)
store.dispatch(‘getInfo’)
uni.closeAuthView();
setTimeout(() => {
uni.closeAuthView();
if (type == ‘navto’) {
uni.navigateTo({
url: goToUrl
});
}
}, 500)
}
},
fail(err) { // 登录失败
uni.hideLoading();
uni.closeAuthView();
let arr = []
if (err.code == 30002) {
uni.navigateTo({
url: /pages/login/index?type=${type}
});
} else if (err.code != 30003) {
utils._showToast(‘当前不支持一键登录,正在跳转登录页’)
setTimeout(() => {
uni.navigateTo({
url: /pages/login/index?type=${type}
});
}, 500);
}
}
})
更多关于uni-app 离线打包 一键登录后 登录弹窗无法关闭的实战教程也可以访问 https://www.itying.com/category-93-b0.html
升级 HBuilderX 最新正式版,或者 HBuilderX alpha 版本,测试标准基座、自定义开发模式是否正常?是所有的安卓都不行,还是部分机型、系统版本有问题?提供下已经排查得到的结果
更多关于uni-app 离线打包 一键登录后 登录弹窗无法关闭的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在您的代码中,uni.closeAuthView() 被多次调用,这可能导致弹窗关闭异常。一键登录弹窗关闭失败通常与调用时机和调用次数有关。
问题分析:
- 在
success回调中,连续调用了两次uni.closeAuthView(),且第二次被包裹在setTimeout中 - 重复调用可能导致弹窗状态异常,尤其是在快速连续调用时
解决方案:
- 移除重复的
uni.closeAuthView()调用 - 确保在登录流程完成后只调用一次关闭方法
修改建议:
async success(res) {
uni.hideLoading();
try {
let param = {
accessToken: res.authResult.access_token,
openId: res.authResult.openid,
device: "app",
}
let login = await oneClickLogin(param)
let { token } = login
utils._setStorage('token', token)
store.dispatch('getInfo')
// 确保只调用一次关闭方法
uni.closeAuthView();
if (type == 'navto') {
uni.navigateTo({
url: goToUrl
});
}
} catch(error) {
uni.closeAuthView();
// 错误处理
}
}

