在日常开发中常常碰见这种需要,用户使用的某个功能需要申请权限。我们需要提前将权限申请好,以便用户正常使用功能,当第一次进行权限判断的时候有几种情况:
1、用户第一次进入需要给予权限提示
2、用户第二次进去时不管上次是否允许权限都不再进行提示
3、用户在点击需要使用权限的功能时候进去到权限设置页引导用户去设置权限。
以下是相关逻辑判断代码:
//这里以获取用户地址作为权限获取判断
checkAuth: function() {
wx.getSetting({
success(res) {
console.log(res)
var authMap = res.authSetting;
var length = Object.keys(authMap).length;
console.log("长度:" + length)
var isAuthAddress = 0; //是否授权通过,有三种情况,0:从未授权,1:授权成功,2:授权失败
// if ('scope.address' in authMap) {
if (authMap.hasOwnProperty('scope.address')){
if (authMap['scope.address']) { //已经授权成功
isAuthAddress = 1
} else { //授权拒绝
isAuthAddress = 2
}
} else { //没有授权过
}
if (isAuthAddress == 0) {
wx.authorize({
scope: 'scope.address',
success() {
wx.showToast({
title: '授权成功'
})
},
fail(e) {
wx.showToast({
title: '授权失败'
})
}
})
}
}
})
}
在用户使用需要权限的功能时候进行进一步的判断,相关代码如下:
goAddressListener: function() {
var that = this;//这里需要将this赋值给that,负责在回调里面使用的this是全局的this,概念类似于java内部类的this和类的this
wx.getSetting({
success(res) {
console.log(res.authSetting)
if (res.authSetting["scope.address"]) {
console.log("拥有授权");
//that.getAddress(); //授权成功后这里需要再点击一下才能获取地址
} else {
wx.openSetting({
success(res) {
console.log("授权成功")
},
fail(e) {
console.log("授权失败")
}
})
}
}
})
}