uni踩坑笔记 - 微信小程序端@chooseavatar事件不触发

一、问题描述

  • 根据uniapp官方文档配置如下按钮以获取用户微信头像,但偶尔出现点击按钮无任何反应的情况,且无法触发@chooseavatar的回调函数,导致也无法打印失败的日志。
<button open-type="chooseAvatar" @chooseavatar="getAvatar">
	<image v-if="form.headImage" :src="form.headImage"></image>
	<text v-else>上传头像</text>
</button>

二、原因分析

  • 未在小程序后台系统的服务内容声明中配置【用户信息】信息类型,被微信官方拦截。
  • 用户首次进入小程序并调用开发能力时自动弹出隐私协议确认弹窗,被用户拒绝。

以上情况均有可能导致使用相关功能时出现异常

三、解决方案

1.确认当前小程序的隐私政策配置

  • 小程序后台 > 账号设置 > 基本设置 > 服务内容声明 > 用户隐私保护指引 是否在用户隐私指引中添加【用户信息】类型,未配置可能会导致相关api调用被微信拦截。
    在这里插入图片描述
    在这里插入图片描述

2.用户首次进入小程序并使用相关开发能力时,微信会自动进行隐私确认弹窗

在这里插入图片描述

  • 若用户拒绝该隐私指引,后续再点击按钮则无法触发@chooseavatar,点击按钮没有任何反应(微信的隐私弹窗有个内置的cd时间,大约15秒左右,第一次拒绝后等大约15秒后再点击按钮,才会再次出现弹窗 ),交互体验很差。且控制台也可能不会出现任何报错信息。

此时可以通过使用wx.getPrivacySettingwx.requirePrivacyAuthorize等api来优化交互

附上代码:

  1. 在按钮上添加click事件,事件回调中获取用户的隐私授权情况,未授权则主动唤起隐私弹窗
html部分:
<button open-type="chooseAvatar" @chooseavatar="getAvatar" @click="checkPrivacy">
   <image v-if="form.headImage" :src="form.headImage"></image>
   <text v-else>上传头像</text>
</button>
js部分:
// 检查用户是否已同意微信隐私政策
checkPrivacy() {
   setTimeout(() => {
   	wx.getPrivacySetting({
   		success: res => {
   			// res.needAuthorization  是否需要隐私授权 true-需要(未授权) false-不需要(已授权)
   			res.needAuthorization && wx.requirePrivacyAuthorize();
   		}
   	})
   }, 500)
}
  1. 即可得到以下效果,每次点击上传头像按钮都能进行反馈,直到用户同意请添加图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值