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
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');
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
}
|