微信小程序图片保存到相册API有时无法保存无法授权的问题解决

wx.saveImageToPhotosAlbum的使用

具体如何使用可以查看官方的文档:官方文档

注:本文是在微信调试基础库2.13.2版本下的测试结果

根据文档我们已经正确调用了,也经过测试没问题了,但是就是后面测试的时候发现了有时候有的手机就出问题了,无法弹出授权页面,也没有任何提示,就是保存不成功,这样子的交互是很不友好的,于是开始解决这个问题。


分析问题的原因

经过大量的真机测试发现了微信小程序中,如果用户在拒绝过授权,下次再请求时是不会再次弹出授权窗口的所以需要先判断授权状态,手动弹出授权提醒。

这个时候wx.openSetting往往也是不能触发授权弹窗,应该是处于防止骚扰考虑。

一般都是提示:

"saveImageToPhotosAlbum:fail authorize no response"

"saveImageToPhotosAlbum:fail auth deny"

……

无法授权的提示

//这种写法是无效的,测试过
wx.saveImageToPhotosAlbum({
   filePath: res.tempFilePath,
   success: function(res) {},
   fail: function(res) {
      wx.openSetting({})//再次获取授权
     }
})

那么如何解决?

在调用wx.saveImageToPhotosAlbum()这个API之前先做个判断,判断是否有这个权限了:

wx.getSetting()这个就可以获取这信息

res.authSetting.hasOwnProperty(‘scope.writePhotosAlbum’)如果有这个字段,状态是false,说明拒接过,这种情况是不会再次自动弹出授权窗口的

这个时候可以做两种处理:

  1. 调用弹窗出来重新授权,这个是在参考其他开发人员的方案,本人测试后发现还是有的手机无法获取授权,同样获取不了权限,大家可以试试效果。
    wx.getSetting({
      success: (res) => {
      if(res.authSetting.hasOwnProperty(‘scope.writePhotosAlbum’)=== false ){
       wx.showModal({
         title: '提示',
         content: '需要获取相册权限',
         success: function (res) {
         if (res.confirm) {
          //  打开授权页面,让用户手动打开权限
          wx.openSetting({
          success: function (data) {}
         })
         }
      }
     }
    }
  2. 由于用户拒绝过无法再次弹窗提示授权,这个时候只能做个提示,提示用户到小程序的设置功能中去打开相册的授权。这个方式任何机型有用!

     怎么打开这个设置可以看这个:微信小程序设置管理

     这边提示没给授权的用户进行操作即可,温馨的提示足以做到人性化的交互。

猜你喜欢

转载自blog.csdn.net/xiao_bin_shen/article/details/110876392