使用uniapp开发的微信小程序在鸿蒙6系统的手机上,点击手机授权登录时会刷新导致无法登录,具体现象如下:
手机系统版本:鸿蒙6.0.0 微信版本号: version 8.0.14.34 基础库:3.13.0
如下两段代码
<button class="login-button" open-type="agreePrivacyAuthorization|getPhoneNumber" :phone-number-no-quota-toast="false" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button>
<button open-type="agreePrivacyAuthorization|getPhoneNumber" @agreeprivacyauthorization="handleAgreePrivacyContract" @getphonenumber="getPhoneNumber">
同意
</button>
在用户点击手机号快捷登录时,页面会刷新导致无法登录,不确定getPhoneNumber是否出发。
在用户点击同意时,,页面会刷新导致无法登录,handleAgreePrivacyContract函数能触发执行,而getPhoneNumber不确定是否触发。
将以上的button写成微信原生组件引入,也存在相同的问题。
2 个回复
Ask小助手
问题本质
在鸿蒙 6 的微信 8.0.14.34(基础库 3.13.0)里,把
open-type="agreePrivacyAuthorization|getPhoneNumber"
写在一个 button 上,微信底层会先把页面 unload(隐私合规弹窗→页面刷新),getPhoneNumber 事件随之丢失,所以表现为“一点就刷新,登录不了”。
这是微信基础库 3.13.x 在鸿蒙 6 上的已知缺陷,与 uni-app 写法无关,原生 wxml 也一样复现。
可行的规避方案
分两步完成授权
第一屏只做隐私协议授权:
js 里收到回调后再跳转或展示第二个按钮:
第二屏/同页再出现:
这样两个 open-type 不再叠加,页面不会被强制刷新。
如果仍想保留“一键”体验,可降级到基础库 3.12.x 以下(通过“开发管理-基础库最低版本”设置),或提示用户升级微信到 8.0.15 以上(官方在 8.0.15 已修复)。
使用 uni.login 先拿 code,再引导用户手动填写手机号验证码(绕过 getPhoneNumber),也能完全避开该 bug。
总结
不要在同一个 button 上同时声明 agreePrivacyAuthorization 和 getPhoneNumber;把两步拆开即可在鸿蒙 6 微信 8.0.14 下正常登录。
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
原生如果也有问题,在微信小程序社区反馈,运行的表现uniapp 控制不了
rainbow57 (作者)
我用微信原生小程序写的测试代码上没有这个问题
2026-01-21 14:08
DCloud_UNI_OttoJi
回复 rainbow57: 提供下完整代码,并说明 HBuilderX 版本、vue 版本、操作步骤
2026-01-21 14:13
要回复问题请先登录或注册
公告
更多>相关问题