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系统与微信小程序隐私协议授权机制兼容性导致的。当用户未同意隐私协议时,鸿蒙6系统会强制触发页面刷新来完成授权流程,这打断了正常的登录逻辑。
解决方案:
- 分离授权与获取手机号流程 将隐私协议授权和获取手机号拆分为两个独立的按钮操作:
<!-- 先处理隐私协议授权 -->
<button v-if="!hasAgreedPrivacy" open-type="agreePrivacyAuthorization" @agreeprivacyauthorization="handleAgreePrivacyContract">
同意隐私协议
</button>
<!-- 授权后再显示获取手机号按钮 -->
<button v-else open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button>
- 在handleAgreePrivacyContract中处理授权成功后的逻辑
handleAgreePrivacyContract(e) {
console.log('隐私协议授权结果:', e)
if (e.detail && e.detail.authState === 'agree') {
// 授权成功,设置状态标识
this.hasAgreedPrivacy = true
// 可以在这里存储授权状态到本地
uni.setStorageSync('hasAgreedPrivacy', true)
}
}
- 页面加载时检查授权状态
onLoad() {
// 检查是否已同意隐私协议
const hasAgreed = uni.getStorageSync('hasAgreedPrivacy')
if (hasAgreed) {
this.hasAgreedPrivacy = true
}
}


