You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.4 KiB

2 years ago
/**
* 小程序相关权限
* @param {String} scopeValue - 权限种类isMessage为订阅消息设置,默认false
*
*/
const TIPS_MAP = {
'userInfo': '用户信息',
'userLocation': '地理位置', //需要在manifest中配置permission。
'address': '通信地址',
'userLocationBackground': '后台定位',
'record': '录音功能',
'writePhotosAlbum': '保存到相册',
'camera': '摄像头',
'invoice': '获取发票',
'invoiceTitle': '发票抬头',
'werun': '微信步数',
'message': '订阅消息'
}
export default class MpAuth {
constructor(scopeValue) {
this.scopeValue = scopeValue
this.isMessage = scopeValue === 'message' ? true : false
}
// 检测当前请求权限是否可用。
checkAuth() {
const that = this;
return new Promise((resolve, reject) => {
uni.getSetting({
withSubscriptions: that.isMessage, //是否获取用户订阅消息的订阅状态
success: res => {
if (!that.isMessage) { // 非订阅消息
if (!res.authSetting[
`scope.${this.scopeValue}`]) { //用户未请求过此权限,后者用户拒绝了此权限
uni.authorize({ //如果没请求过,会弹窗询问。同意过,直接success。此前拒绝,直接fai
scope: `scope.${this.scopeValue}`,
success: res => { //用户同意
console.log(
`%c用户同意${TIPS_MAP[this.scopeValue]}权限1`,
'color:green;background:yellow');
resolve(1)
},
fail: err => { //用户拒绝
console.log(
`%c用户拒绝${TIPS_MAP[this.scopeValue]}权限`,
'color:green;background:yellow');
resolve(0)
that.setAuth()
}
})
} else { //用户同意授权此权限,直接调用接口
console.log(`%c用户同意${TIPS_MAP[this.scopeValue]}权限2`,
'color:green;background:yellow');
resolve(1)
}
} else { //订阅消息 TODO
}
},
fail: err => {
console.log(`%cuni.getSetting失败:`, 'color:green;background:yellow');
console.log(err);
}
})
})
}
// 引导用户开启权限
setAuth() {
uni.showModal({
title: '设置权限',
content: `当前功能需要${TIPS_MAP[this.scopeValue]}权限,是否开启?`,
confirmText: '立即授权',
success: res => {
res.confirm && uni.openSetting()
},
fail: err => {
console.log(`%cuni.showModal失败:`, 'color:green;background:yellow');
}
})
}
}