对于授权有三种情况:
1.用户第一次使用,弹出授权。
2.用户已经拒绝过授权。
3.用户已经授权过。
正确的逻辑处理是:
(1)获取用户授权的信息
(2)判断scope.writePhotosAlbum的值,若为true则已经授权,直接调用保存到相册的方法;若为undefined,则说明是第一次授权,需要调用wx.authorize弹出授权框,授权框只在第一次询问时弹出,如果用户已经拒绝了,则不会弹出。因此我们需要对undefined情况进行判断。若为false,则已经拒绝了授权,这时候我们需要调用wx.openSetting引导用户打开设置,保存到相册,wx.openSetting设置界面只会出现小程序已经向用户请求过的权限,正因为wx.authorize和wx.openSetting的使用场景限制,我们才需要考虑这两种case一起使用才行,缺一不可。
wx.getSetting({ success(res) { if (res.authSetting['scope.writePhotosAlbum']) { _this.saveImg(); } else if (res.authSetting['scope.writePhotosAlbum'] === undefined) { wx.authorize({ scope: 'scope.writePhotosAlbum', success() { _this.saveImg(); }, fail(){ wx.showToast({ title: '您没有授权,无法保存到相册', icon: 'none' }) } }) }else { wx.openSetting({ success(res) { if (res.authSetting['scope.writePhotosAlbum']) { _this.saveImg(); }else{ wx.showToast({ title:'您没有授权,无法保存到相册', icon:'none' }) _this.setData({ isSaving: false }); } } }) } } })