getUserProfile:fail can only be invoked by user TAP gesture

获取用户信息失败,error:getUserProfile:fail can only be invoked by user TAP gesture

它的大概意思就是:该接口必须用户点击才可以调通

官方获取用户信息调整通告:小程序登录、用户信息相关接口调整说明 | 微信开放社区

解决

wx.getUserProfile(Object object)

所以改造下方法,让用户先点击

getUserInfo(e) {
    var _this = this
    wx.showModal({
      title: '温馨提示',
      content: '亲,授权微信登录后才能正常使用小程序功能',
      success(res) {
        console.log(res)
        //如果用户点击了确定按钮
        if (res.confirm) {
          wx.getUserProfile({
            desc: '获取你的昵称、头像、地区及性别',
            success: res => {
              _this.setData({
                userInfo: res.userInfo,
                hasUserInfo: true
              })
              console.log(res);
              console.log(1);
            },
            fail: res => {
              console.log(res)
              //拒绝授权
              wx.showToast({
                title: '您拒绝了请求,不能正常使用小程序',
                icon: 'error',
                duration: 2000
              });
              return;
            }
          });
        } else if (res.cancel) {
          //如果用户点击了取消按钮
          wx.showToast({
            title: '您拒绝了请求,不能正常使用小程序',
            icon: 'error',
            duration: 2000
          });
          return;
        }
      }
    });

前端代码也贴出来吧

<view class="container">
  <view class="userinfo">
    <block wx:if="{{!hasUserInfo}}">
      <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
      <button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
    </block>
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </block>
  </view>
</view>

效果

 完美解决

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
"getUserProfile:fail can only be invoked by user TAP gesture."的错误通常是因为在调用wx.getUserProfile方法时没有通过用户点击手势触发。这意味着在调用getUserProfile方法之前,需要将其绑定到一个点击事件上,确保只有用户点击后才能调用该方法。 另外,有些情况下,如果在wx.login方法中嵌套调用getUserProfile方法,也会导致这个错误的出现。所以需要确保在不同的时间段内调用这两个方法,而不是同时进行。 此外,有人提到使用async和await可能会出现这个错误。如果你在代码中使用了async和await,尝试将其去掉并使用其他方式来处理异步操作,看看是否还会出现相同的错误。 总结起来,解决这个错误的关键是确保在调用wx.getUserProfile方法时,通过用户点击手势触发,并且避免在wx.login方法中同时调用getUserProfile方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uni.getUserProfile报错:fail can only be invoked by user TAP gesture](https://blog.csdn.net/cwjxyp/article/details/122201261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.](https://blog.csdn.net/qq_37451395/article/details/123579444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java劝退师、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值