收藏
回答

wx.onNeedPrivacyAuthorization监听隐私授权,同意后回调没有达到预期效果

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.onNeedPrivacyAuthorization 工具 8.0.40 3.0.1
wx.onNeedPrivacyAuthorization((resolve, eventInfo) => {
  // console.log('触发本次事件的接口是:' + eventInfo.referrer, eventInfo, resolve)
  // 需要用户同意隐私授权时
  // 弹出开发者自定义的隐私授权弹窗
  this.setData({
    _visable: true
  })
  this.resolvePrivacyAuthorization = resolve
});
bindAgreePrivacyAuthorization() {
      // console.log('同意', this.resolvePrivacyAuthorization)
      this.resolvePrivacyAuthorization({
        buttonId: 'agree-btn',
        event: 'agree'
      })
      this.setData({
        _visable: false,
      })
    }

创建以上代码用于授权隐私,以下代码测试调用效果

 wx.authorize({
          scope: scope.userLocation,
          // 授权成功的回调
          success(res) {
            console.log(res, 'success')
          },
          // 拒绝授权后的回调
          fail(res) {
            console.log(res, 'getSetting--fail')
            if (res.errno == 104) {
              // 隐私权限取消授权
              // getSetting(scope, success, cancel)
              if (res.errMsg == 'authorize:fail privacy permission is not authorized or buttonId is wrong') {
                // 已经授权,但是不知道为毛buttonId is wrong,可能那边的回调有问题,所以再调用一下
              } else {
                // 确认不授权隐私
              }
            } else {
              // 引导授权
            }
          },
        })

预期确认授权以后,应该直接进入success回调,打印console.log(res, 'success')但是实际情况会触发fail,打印信息为authorize:fail privacy permission is not authorized or buttonId is wrong,监听是以组件形式引入界面。

使用button获取getPhoneNumber第一次同意授权也无法获取到号码,需要再次点击才能获取到信息

回答关注问题邀请回答
收藏

2 个回答

  • Jerry
    Jerry
    2023-09-07

    wxml贴一下

    2023-09-07
    有用 1
    回复 3
    • 頩子
      頩子
      2023-09-07
      2023-09-07
      回复
    • Jerry
      Jerry
      2023-09-07回复頩子
      这里不能用bind:tap="bindAgreePrivacyAuthorization";改成 bindagreeprivacyauthorization=“handleAgreePrivacyAuthorization”, 函数名也要改
      2023-09-07
      1
      回复
    • 頩子
      頩子
      2023-09-07回复Jerry
      谢谢,可以了
      2023-09-07
      回复
  • 金钱豹
    金钱豹
    2023-09-07

    1,检查一下你的小程序隐私政策,有没有声明这个权限。

    2,另外加一个button,点击之后先进行隐私政策弹窗授权,再显示手机号的button,分两步操作。参考如下代码的思路,showPrivacyPopup方法是弹窗进行隐私政策授权,需要自行开发一下。

    <button bind:tap="showPrivacyPopup" type="primary" wx:if="{{isNeedAuthorization===true}}">阅读并同意隐私保护指引</button>
                <button type="primary" open-type="getPhoneNumber" bindgetphonenumber="authPhoneNumber" wx:else>授权绑定手机号</button>
    
    2023-09-07
    有用
    回复 1
    • 頩子
      頩子
      2023-09-07
      这样比较麻烦,需要修改之前的wxml的代码,我做的组件,只要引入组件就行了,自动监听事件触发弹窗授权。
      但是第一次同意授权没有按照预期的success中,第二次触发就不需要授权能正常获取到数据了,因为实际上第一次已经成功了,但是走到了fail的回调中不符合预期
      2023-09-07
      回复
登录 后发表内容