业务场景
在微信小程序中,我们经常会遇到要获取授权的情况,如地理位置,相册写入等等,用户可能会选择允许或拒绝,对这种情况每次都需要做判断是否有对应的权限,并引导其开启设置。
代码实现
const checkAuth = ({
scope = '', //如scope.writePhotosAlbum
confirmContent = '检测到您没打开相关的权限,是否去设置打开?',
openSettingCompleteToast = '打开设置后可重新操作'
}) => {
return new Promise((resolve, reject) => {
//授权失败(拒绝)时的处理
const authorizeFail = (res) => {
console.log('wx.authorize fail', res)
wx.showModal({
content: confirmContent,
confirmText: "确认",
cancelText: "取消",
success (res) {
if(res.confirm){
wx.openSetting({
complete () {
openSettingCompleteToast && wx.showToast({
title: openSettingCompleteToast,
icon: 'none'
});
reject();
}
})
} else {
reject();
console.log('用户点击了取消');
}
}
});
};
//检查相关权限
wx.getSetting({
success (res) {
// console.log(res.authSetting)
//如果没有相关权限,则调取wx的授权循问
if(!res.authSetting[scope]){
wx.authorize({
scope,
success () {
resolve();
// console.log('获取授权成功')
},
fail: authorizeFail
})
} else {
resolve()
// console.log('已有权限')
}
},
fail: (res) => {
console.log('get setting fail', res)
reject();
}
});
});
};
//调用
this.saving = true;
checkAuth({
scope: 'scope.writePhotosAlbum',
confirmContent: '检测到您没打开添加照片的权限,是否去设置打开?',
openSettingCompleteToast = '打开设置后可重新点击下载图片'
}).then(() => {
//执行保存图片的方法
//saveImgToAlbum();
}).catch(() => {
this.saveing = false;
})