看过很多文档,解决方案都是高度的一致,但是代码贴上去就是不行....
好吧,只能一步步解析代码看哪里出了问题。
解决思路:
1.wx.downloadFile下载图片
2.wx.openSetting授权
3.wx.saveImageToPhotosAlbum图片保存到本地
问题点:
1.wx.saveImageToPhotosAlbum的报错信息,真机跟调试机上会出现不一致...官方文档上也没找到全面的,下面列出真机跟调试都出现的报错信息
err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response"
2.一步步下来都是ok 的,到了用户授权这一步大部分代码都是没反应,细心观察了下,授权是需要弹窗支持的....orz
解决方案:将授权方法wx.openSetting写入wx.showModal里
wx.showModal({ title: '提示', content: '需要您授权保存相册', showCancel: false, success: modalSuccess => { wx.openSetting({ success(settingdata) { console.log("settingdata", settingdata) }, fail(failData) { console.log("failData", failData) }, complete(finishData) { console.log("finishData", finishData) } }) }})
完整代码:
wx.downloadFile({ url: e.currentTarget.dataset.src,//图片地址 success: function (res) { //图片保存到本地 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (data) { wx.hideLoading() wx.showModal({ title: '提示', content: '您的二维码已保存到相册,赶快识别二维码添加小易进行咨询吧', showCancel: false, }) }, fail: function (err) { if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") { // 这边微信做过调整,必须要在按钮中触发,因此需要在弹框回调中进行调用 wx.showModal({ title: '提示', content: '需要您授权保存相册', showCancel: false, success: modalSuccess => { wx.openSetting({ success(settingdata) { console.log("settingdata", settingdata) if (settingdata.authSetting['scope.writePhotosAlbum']) { wx.showModal({ title: '提示', content: '获取权限成功,再次点击图片即可保存', showCancel: false, }) } else { wx.showModal({ title: '提示', content: '获取权限失败,将无法保存到相册哦~', showCancel: false, }) } }, fail(failData) { console.log("failData", failData) }, complete(finishData) { console.log("finishData", finishData) } }) } }) } }, complete(res) { wx.hideLoading() } }) } })
好了,授权有了,授权后保存图片ok,大功告成。
参考文献https://www.jianshu.com/p/77b8d520ba3f