问题描述:大家可能会遇到这样的问题,有一个保存图片到相册的功能,我们利用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);
}
});
}
}
})
};
}
});
}
})
公众号能做到点击保存图片吗
公众号能用吗
还挺形象