小程序授权流程的场景及优化封装

155 阅读1分钟

授权流程场景及优化案例

参考 这篇文章

代码封装

export function 授权方法名() {
  return new Promise((resolve, rejects) => {
    uni.getSetting({
      success(res) {
        // 授权队列中的相册权限尚未定义,说明是第一次获取授权
        if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
          uni.authorize({
            scope: 'scope.writePhotosAlbum',
            success(res) {
              // 同意授权
              resolve('Yes')
            },
            fail(err) {
              // 拒绝授权
              rejects('No')
            },
          })
        } else if (res.authSetting['scope.writePhotosAlbum'] === false) {
          // 授权队列中的相册权限已存在并且为false,说明用户曾经拒绝授权
          uni.showModal({
            title: '提示!',
            content: '您的相册权限尚未授权~',
            confirmText: '去设置',
            showCancel: false,
            success: (res) => {
              // 用户点击去设置,打开授权页
              uni.openSetting({
                success: (res) => {
                  // 用户在授权页重新同意了相册授权
                  if (res.authSetting['scope.writePhotosAlbum']) {
                    resolve('Yes')
                  } else {
                    rejects('No')
                  }
                },
                fail: (err) => {
                  rejects(err)
                },
              })
            },
          })
        } else {
          // 已授权过了
          resolve('Yes')
        }
      },
    })
  })
}

main.js

import { 授权方法名 } from '@/utils/xx.js'
Vue.prototype.$授权方法名 = 授权方法名

调用

      this.$授权方法名()
        .then((res) => {
          // 业务逻辑
        })
        .catch((err) => {
          console.error('未授权:', err)
        })