Skip to content

微信授权相关

在微信小程序开发中,诸如 wx.saveImageToPhotosAlbum 等 API 的使用通常先要求获得用户的授权。为了简化此流程并增强代码复用性,我们对这些API进行了智能封装。现在,直接调用这些封装方法,系统将自动检查相应的权限状态。若用户尚未授权,会弹出授权请求;若用户之前已拒绝授权,则会自动引导至设置页面。一旦用户在设置中重新授权,程序将自动回到之前的操作并继续执行。

传统方法 vs 封装方法

传统方法

这里我们用 wx.saveImageToPhotosAlbum 举例,在之前的开发中,如果我们要保存相册,就会这样做:

js
wx.getSetting({
  success(res) {
    if (!res.authSetting['scope.writePhotosAlbum']) {
      // 请求授权
      wx.authorize({
        scope: 'scope.writePhotosAlbum',
        success() {
          // 用户已授权,保存图片
          wx.saveImageToPhotosAlbum({
            filePath: 'path/to/image',
            success(res) {
              message.showToast('保存成功')
            },
            fail(err) {
              // do something
            }
          })
        },
        fail() {
          // 用户拒绝授权,引导到设置页面
          wx.openSetting({
            ...
          })
        }
      })
    } else {
      // 已有授权,直接保存图片
      wx.saveImageToPhotosAlbum({
        ...
      })
    }
  }
})

封装方法

而现在我们只要这样做:

js
wechat.saveImageToPhotosAlbum({
  filePath: 'path/to/image',
  success(res) {
    message.showToast('保存成功')
  },
  fail(err) {
    ...
  }
})

通过封装方法,系统会自动检查权限状态,处理用户授权请求,并在拒绝后引导至设置页面。用户授权后,程序自动继续之前的操作。

支持的 API 列表可参考 文档

getAuthorizedByScope

当需要在操作前显示「保存中」加载提示时,应预先检测授权状态。这时可使用 wechat.getAuthorizedByScope 方法,如下所示:

js
try {
  const isAuth = await wechat.getAuthorizedByScope(
    wechat.WECHAT_METHOD_TO_SCOPE.saveImageToPhotosAlbum
  )

  if (isAuth) {
    message.showLoading('保存中')
  }

  await wechat.saveImageToPhotosAlbum({
    filePath: 'path/to/image',
    success(res) {
      message.showToast('保存成功')
    },
    fail(err) {
      // do something
    },
  })
} catch (err) {
  message.hideLoading()

  message.showToast('保存失败,请重试')
}

相关文档