评论

用户保存图片到相册授权问题。

这篇文章描述了关于微信小程序,用户保存图片到相册的授权问题,如有不足请大家不要心慈手软,直接怼就行。

问题描述:大家可能会遇到这样的问题,有一个保存图片到相册的功能,我们利用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 事件触发保存操作,

保存成功^ _^

最后一次编辑于  07-03  
点赞 0
收藏
评论

2 个评论

  • 林小夕🌀
    林小夕🌀
    11-21

    哈哈,形象并且真实!

    还有个处理办法,是在保存图片的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);
                              }
                            });
                          }
                        }
                      })
                    };
                  }
                });
              }
            })









    11-21
    赞同
    回复 1
    • 🌞
      🌞
      12-02
      老哥稳
      12-02
      回复
  • 微云
    微云
    07-10

    还挺形象

    07-10
    赞同
    回复