微信小程序 拒绝地址授权无法二次授权解决方法
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))
}
})
}
})
},