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

2 回复

升级 HBuilderX 最新正式版,或者 HBuilderX alpha 版本,测试标准基座、自定义开发模式是否正常?是所有的安卓都不行,还是部分机型、系统版本有问题?提供下已经排查得到的结果

更多关于uni-app 离线打包 一键登录后 登录弹窗无法关闭的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在您的代码中,uni.closeAuthView() 被多次调用,这可能导致弹窗关闭异常。一键登录弹窗关闭失败通常与调用时机和调用次数有关。

问题分析:

  1. success 回调中,连续调用了两次 uni.closeAuthView(),且第二次被包裹在 setTimeout
  2. 重复调用可能导致弹窗状态异常,尤其是在快速连续调用时

解决方案:

  1. 移除重复的 uni.closeAuthView() 调用
  2. 确保在登录流程完成后只调用一次关闭方法

修改建议:

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();
    // 错误处理
  }
}
回到顶部