uni-app开发的微信小程序在鸿蒙6系统的手机上点击手机授权登录时会刷新导致无法登录

uni-app开发的微信小程序在鸿蒙6系统的手机上点击手机授权登录时会刷新导致无法登录

开发环境 版本号 项目创建方式
Windows Windows 10 CLI

示例代码:

<button class="login-button" open-type="agreePrivacyAuthorization|getPhoneNumber" :phone-number-no-quota-toast="false" [@getphonenumber](/user/getphonenumber)="getPhoneNumber">  
      手机号快捷登录  
</button>  
<button open-type="agreePrivacyAuthorization|getPhoneNumber" [@agreeprivacyauthorization](/user/agreeprivacyauthorization)="handleAgreePrivacyContract" [@getphonenumber](/user/getphonenumber)="getPhoneNumber">  
      同意  
</button>
getPhoneNumber(e) {  
  console.log('getPhoneNumber:>> ', e)  
},  
handleAgreePrivacyContract(e) {  
  console.log('handleAgreePrivacyContract:>> ', e)  
}  

操作步骤:

<button class="login-button" open-type="agreePrivacyAuthorization|getPhoneNumber" :phone-number-no-quota-toast="false" [@getphonenumber](/user/getphonenumber)="getPhoneNumber">  
      手机号快捷登录  
</button>  

真机测试,手机系统版本升级至鸿蒙6,点击“手机号快捷登录”,小程序会刷新

预期结果:

真机测试,手机系统版本升级至鸿蒙6,点击“手机号快捷登录”,小程序能正常执行getPhoneNumber函数

实际结果:

真机测试,手机系统版本升级至鸿蒙6,点击“手机号快捷登录”,小程序会刷新,不确定是否执行了getPhoneNumber函数

bug描述:

使用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](/user/getphonenumber)="getPhoneNumber">  
      手机号快捷登录  
</button>  
<button open-type="agreePrivacyAuthorization|getPhoneNumber" [@agreeprivacyauthorization](/user/agreeprivacyauthorization)="handleAgreePrivacyContract" [@getphonenumber](/user/getphonenumber)="getPhoneNumber">  
      同意  
</button>

更多关于uni-app开发的微信小程序在鸿蒙6系统的手机上点击手机授权登录时会刷新导致无法登录的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

信息完整性

标题、描述、代码、复现步骤、预期/实际结果、运行平台(鸿蒙 6.0.0 / 微信 8.0.14.34 / 基础库 3.13.0)均已给出,基本完整。
缺少: – HBuilderX 具体版本号(仅写“正式版”)。 – 是否使用自定义组件或页面级 onShow/onLoad 中是否有重定向逻辑。 – 控制台完整日志(是否伴随 crash 或 js 异常)。
建议补充:manifest.json 中 “permissionScope” 是否已声明 getPhoneNumber,以及 app.json 是否声明了 privacyApi 相关字段。

复现可行性

提供的两段 button 代码可直接粘贴运行,复现步骤也足够清晰:鸿蒙 6 真机 → 点击按钮 → 页面刷新。
但缺少“页面刷新”的进一步描述:是整页白屏重载,还是当前页路由重新 onLoad?需要用户补充日志或录屏。

预期结果合理性

预期“正常执行 getPhoneNumber”符合微信小程序官方文档;在鸿蒙系统上同样适用,因此预期合理。

实际结果是否误报

根据知识库,鸿蒙 Next 平台对小程序 getPhoneNumber 事件本身无已知“点击即刷新”限制。
但微信 8.0.14.34 已较旧(当前正式 8.0.50+),基础库 3.13.0 也低于最新 3.4.x;旧版本在鸿蒙 6 上存在兼容性问题。
因此初步判断并非误报,但需用户先升级微信客户端与基础库后再验证。

版本与替代方案

建议用户:

升级微信至 8.0.50 以上、基础库 3.4.x 以上后重测;
在 manifest.json → mp-weixin → requiredBackgroundModes 中移除不必要的 background fetch,防止触发重载;
若仍复现,可改用 uni.login + 后端解密手机号方案作为临时规避(参考 鸿蒙元服务登录接入流程)。

结论

该反馈基本有效,但需补充 HBuilderX 精确版本、微信/基础库升级结果、控制台日志后再进一步定位。
先按“升级微信客户端+基础库”处理,若升级后仍复现,请补充日志并 reopen issue。

更多关于uni-app开发的微信小程序在鸿蒙6系统的手机上点击手机授权登录时会刷新导致无法登录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于鸿蒙6系统与微信小程序隐私协议授权机制兼容性导致的。当用户未同意隐私协议时,鸿蒙6系统会强制触发页面刷新来完成授权流程,这打断了正常的登录逻辑。

解决方案:

  1. 分离授权与获取手机号流程 将隐私协议授权和获取手机号拆分为两个独立的按钮操作:
<!-- 先处理隐私协议授权 -->
<button v-if="!hasAgreedPrivacy" open-type="agreePrivacyAuthorization" @agreeprivacyauthorization="handleAgreePrivacyContract">
  同意隐私协议
</button>

<!-- 授权后再显示获取手机号按钮 -->
<button v-else open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
  手机号快捷登录
</button>
  1. 在handleAgreePrivacyContract中处理授权成功后的逻辑
handleAgreePrivacyContract(e) {
  console.log('隐私协议授权结果:', e)
  if (e.detail && e.detail.authState === 'agree') {
    // 授权成功,设置状态标识
    this.hasAgreedPrivacy = true
    // 可以在这里存储授权状态到本地
    uni.setStorageSync('hasAgreedPrivacy', true)
  }
}
  1. 页面加载时检查授权状态
onLoad() {
  // 检查是否已同意隐私协议
  const hasAgreed = uni.getStorageSync('hasAgreedPrivacy')
  if (hasAgreed) {
    this.hasAgreedPrivacy = true
  }
}
回到顶部