微信小程序检查授权封装

606 阅读1分钟

业务场景

在微信小程序中,我们经常会遇到要获取授权的情况,如地理位置相册写入等等,用户可能会选择允许或拒绝,对这种情况每次都需要做判断是否有对应的权限,并引导其开启设置。

代码实现

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;
})