在小程序开发时,在用户拒绝获取通讯地址的授权后,在一段时间内将无法在弹出授权提示导致无法获取通讯地址。通过看微信的api文档,发现其中有一个wx.openSetting()方法可以打开设置页面进行授权。但wx.openSetting()方法打开的设置页面只能显示用户请求过的授权,未请求过的是无法显示在设置页面。所以须先调用wx.authorize()方法进行请求授权。
处理步骤
1、在需要调用通讯地址页面对应的onload方法中调用wx.authorize()请求通讯地址授权。
wx.getSetting({//先获取用户当前的设置
success(res) {
if (!res.authSetting['scope.address']) {
wx.authorize({
scope: 'scope.address',
success(res) {
console.log(res.errMsg);//用户授权后执行方法
},
fail(res){
//用户拒绝授权后执行
}
})
}
}
})
scope.address 是通讯地址授权对应的scope值
2、在对应的调起用户通讯地址的事件中加入以下代码处理
var that = this;
wx.getSetting({
success(res) {
if (!res.authSetting['scope.address']) {
wx.openSetting({
})
}else{
//打开选择地址
wx.chooseAddress({
success: function (res) {
that.setData({
address: res,
noAddress: false
});
}
})
}
},
fail(res){
console.log('调用失败')
}
})
调用wx.getSetting()获取用户的当前设置,success方法返回的值如下:
/*
* res.authSetting = {
* "scope.userInfo": true,
* "scope.userLocation": true
* }
*/
如果res.authSetting['scope.address']返回true说明已经授权会直接打开通讯地址列表页面如下图
如果返回的是undefined或false则会进入打开设置页面,进行设置页面后将通讯地址勾选上在重新打开即可进入上面的图所示的页面。
对于微信的其他的授权api在用户拒绝授权后可以进行上述方法的处理。