授权流程场景及优化案例
参考 这篇文章
代码封装
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)
})