问题描述:大家可能会遇到这样的问题,有一个保存图片到相册的功能,我们利用wx.saveImageToPhotosAlbum() api,正常情况下很简单用户点击按钮,系统询问是否授权,用户点击授权图片保存成功。
但是事情往往不是我们想到那样简单,用户的操作可谓是什么操作都有。当系统询问是否授权时,非常敏感的用户一看到授权2话不说,直接拒绝。心想:“握草,想获取我的隐私?”。不一会自己又感觉不对劲,我要保存图片啊,我怎么点了取消。然后又去点保存,发现什么反应都没,心想:“握草怎么没反应,是不是手机坏了,什么鬼”,强迫症患者这个情况怕不是要疯了。
为什么会出现这种情况,根据微信小程序api发现
wx.saveImageToPhotosAlbum()  api 只会在用户第一次调用的时候发起授权弹窗,如果用户拒绝授权,wx.saveImageToPhotosAlbum()调用失败,这个时候wx.saveImageToPhotosAlbum()走了失败回调,我们在控制台打印
console.log(“用户授权api调用失败,几率0.01%”)
console.log(“用户拒绝授权,几率99.99%”)
用户拒绝授权怎么办,么慌。根据微信小程序文档我们会知道,这种情况下需要用户主动到授权管理页面打开相应的授权开关,高级微信用户都是到入口在那,一般用户授权:“授权管理页面是什么鬼?“,我们不能把希望寄托在他们身上了,他们不是会再一次去点击保存按钮吗?
来一个偷梁换柱,wx.saveImageToPhotosAlbum()调用失败检测是否未授权 this.get_setting()  发现用户未授权,将页面按钮换成
<button open-type=‘openSetting’ bindopensetting=‘bind_load’ class=‘fenxiang_bot_box nobutton’></button> 打开授权管理页面,
用户发现自己“看到了不该看的,握草,用户信息,保存相册,敢获取我的信息,都关掉”,哈哈,用户已经知道是怎么回事了,“不行我得把保存相册打开,这个图片太好了我要保存”;
get_setting(t) {
wx.getSetting({
success: (res) => {
if (res.authSetting[‘scope.writePhotosAlbum’] == undefined) {
this.setData({
img_status: true
});
} else {
this.setData({
img_status: res.authSetting[‘scope.writePhotosAlbum’]
});
}
if (t) {
t()
}
}
})
},
wx.saveImageToPhotosAlbum({
filePath: this.data.img,
success(res) {
wx.showToast({
title: ‘保存成功’
})
},
fail: (res) => {
    this.get_setting(() => {
      if (this.data.img_status) {
        wx.showToast({
          title: '保存失败',
          icon: 'none'
        })
      } else {
        wx.showToast({
          title: '权限不足',
          icon: 'none'
        })
      }
    });
    
  }
})
用户同意授权,打开开关返回bindopensetting=‘bind_load’
bind_load 事件触发保存操作,
保存成功^ _^

哈哈,形象并且真实!
还有个处理办法,是在保存图片的fail里加一个getSetting,在getSetting的success中判断是否未授权(之所以不直接用res中的信息来判断,是因为res的返回中只有个errMsg,内容是提示语,可能会被更改),如果是的话在showModal的确定按钮上加openSetting的操作(官方确认是可以用tap唤醒的showModal的确定按钮上来打开授权管理的)。
这样的好处是不用变量,也不用另外用button来打开授权管理。
wx.saveImageToPhotosAlbum({filePath: "test.png", // 图片路径success:function(res) {wx.showToast({title:'保存成功',})},fail:function(err) {wx.getSetting({success:function(res) {// 判断否有保存权限if(!res.authSetting['scope.writePhotosAlbum']) {wx.showModal({title:'提示',content:'需要获取图片权限哦',success:function(res) {if(res.confirm) {wx.openSetting({success(res) {console.log(res);},fail(res) {console.log(res);}});}}})};}});}})公众号能做到点击保存图片吗
公众号能用吗
还挺形象