小程序在将图片保存到相册时,需要请求writePhotosAlbum的权限。但是小程序的坑就在于在第一次执行保存前如果检测到权限未开启会弹出提示,但是如果这时点击拒绝后,他喵的以后再保存的时候就不管了,导致点击的时候啥反应没有,非常尴尬。
截屏2022-02-08 下午2.26.43.png
就是这里,如果点击拒绝的话它以后再点保存就没用了。
作为一个成熟的小程序,我们当然不能容忍这样的情况出现。我们要在每次保存图片的时候使用微信提供的wx.getSetting api都来手动检查它的权限。有权限的话再执行保存操作。没有权限的话,就要用wx.openSetting api调起小程序的设置页面,让用户手动打开权限。
// 保存图片(先检查权限)
public saveCard = async() => {
const settingRes = await Taro.getSetting();
if (settingRes.authSetting['scope.writePhotosAlbum']) {
this.saveToAlbum();
return;
}
Taro.authorize({
scope: 'scope.writePhotosAlbum',
success() {
this.saveToAlbum();
},
fail() {
Taro.showModal({
title: '提示',
content: '保存到相册的权限已关闭,是否打开?',
success: async(res) => {
if (res.confirm) {
const openRes = await Taro.openSetting();
if (openRes.authSetting['scope.writePhotosAlbum']) {
this.saveToAlbum();
}
}
},
});
},
});
};
在这里,还要注意到的一点是这里调起的设置界面只会出现小程序已经向用户请求过的权限。因此,我们在使用这个api之前要先使用wx.authorize提前发起授权请求,在失败的回调中打开再打开设置页面,否则在设置页面中不会出现该权限的开关。