uni-app 一键登录 调用uni.closeAuthView iOS端不会触发页面onshow

uni-app 一键登录 调用uni.closeAuthView iOS端不会触发页面onshow

开发环境 版本号 项目创建方式
Windows 64 HBuilderX

操作步骤:

  • uni.closeAuthView iOS端不触发页面onshow
  • Android 会触发页面onshow

预期结果:

  • iOS端可以像Android一样 uni.closeAuthView() 完之后触发页面onShow

实际结果:

  • uni.closeAuthView iOS端不触发页面onshow
  • Android 会触发页面onshow

bug描述:

  • uni.closeAuthView iOS端不触发页面onshow
  • Android 会触发页面onshow

更多关于uni-app 一键登录 调用uni.closeAuthView iOS端不会触发页面onshow的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

@DCloud_Android_DQQ 复现问题了吗?试了几台iphone, 都有这个问题

更多关于uni-app 一键登录 调用uni.closeAuthView iOS端不会触发页面onshow的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个属于平台差异。 android 平台目前调用一键登录,确实会触发onshow. 暂时无法抹平此差异。

那能主动调用下onshow吗 调用方式是什么呢 currentPage.$vm.onShow() 不行

小程序的话 可以调用页面onshow ,APP上如果想刷新页面的话 ,有什么api吗

回复 叫啥好呢: 你是想ios 主动调用一下? 你在close的时候 主动调用 this.onShow() 不行吗

回复 DCloud_Android_DQQ: currentPage.onShow() 不行 currentPage.$vm.onShow() 也不行

通过let pages = getCurrentPages(); pages[pages.length - 1].onShow()

回复 DCloud_Android_DQQ: TypeError: _this8.onShow is not a function. (In ‘_this8.onShow()’, ‘_this8.onShow’ is undefined)

回复 叫啥好呢: 你可以把onShow中要进行的操作写到一个method中,然后onShow里面调用,然后这个方法也可以随便调

回复 DCloud_UNI_LXH: 这个我知道,主要页面太多了,

回复 DCloud_UNI_LXH: 后续会考虑和Android一样吗

这是一个已知的uni-app平台差异问题。uni.closeAuthView()在iOS端确实不会自动触发页面的onShow生命周期,而Android端可以正常触发。

解决方案:

  1. 手动触发onShow逻辑 在调用uni.closeAuthView()后,显式执行原本在onShow中的代码:

    uni.closeAuthView()
    // 手动执行onShow中的业务逻辑
    this.loadData()
    this.updateUserInfo()
    
  2. 使用回调函数 如果业务逻辑依赖登录完成后的状态,可在closeAuthView后添加回调:

    uni.closeAuthView()
    setTimeout(() => {
      // 延迟执行确保视图完全关闭
      this.$refs.page.handleAuthClose()
    }, 100)
    
  3. 统一生命周期管理 将页面显示相关的逻辑提取到独立方法中,在onShow和登录关闭后都调用:

    onShow() {
      this.pageShowHandler()
    },
    
    methods: {
      closeAuth() {
        uni.closeAuthView()
        this.pageShowHandler()
      },
      
      pageShowHandler() {
        // 统一的页面显示逻辑
      }
    }
回到顶部