微信小程序 拒绝地址授权无法二次授权解决方法

微信小程序 拒绝地址授权无法二次授权解决方法

wx.chooseAddress({})是小程序获取用户收货地址。编辑用户收货地址信息原生界面的接口,调用接口的时候需要授权获取位置信息,如果我们拒绝了授权后,再次调用微信地址就不会太有弹窗弹出,根据小程序官方文档给出的解释,如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。所以再开发过程中使用这个接口的时候需要做兼容。

为了解决无法二次授权的问题,我需要用到wx.openSetting({})接口,这个接口的作用是调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。此时我们需要手动开启通讯地址,才可以再次调用微信发货地址接口

设置好一个button组件

<button class="getAddress" bindtap="{{ ungetAddress === true ? 'addressAgain' : 'getAddress' }}" bindopensetting="{{ ungetAddress === true ? 'addressAgain' : '' }}">

使用button的bindopensetting方法调用wx.openSetting({})

data: {
	address: '',
    ungetAddress: false
  },

获取位置信息后通过存入本地储存来记录用户是否点击拒绝过位置授权

onLoad: function (options) {
    let address = wx.getStorageSync('address')
    if(address == ''){
      this.setData({
        ungetAddress: false
      })
    }
  },

进入页面的首次获取位置授权信息

  getAddress(){
    let that = this;
    wx.chooseAddress({
      success(res) {
      	that.setData({
          address: res    // 
        })
        wx.setStorageSync('address', res)   // 获取的地址信息存入缓存
      },
      fail: function (err) {
      	// 点击了拒绝授权
        that.setData({
          ungetAddress: true               // 记录用户拒绝了授权操作
        })
        console.log(JSON.stringify(err))
      }
    })    
  },

拒绝授权位置信息再次点击执行以下方法

 addressAgain(){
    let that = this;
    wx.openSetting({
      success(res) {
        console.log(res.authSetting)
        wx.chooseAddress({
          success: function (res) {
            console.log(JSON.stringify(res))
            wx.setStorageSync('address', res)  // 获取的地址信息存入缓存
            that.setData({
              address: res,           
              ungetAddress: false             // 记录用户接受了授权操作          
            })
          },
          fail: function (err) {
            console.log(JSON.stringify(err))
          }
        })
      }
    })
  },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值