mrr.sj.front/utils/permission.js

123 lines
3.2 KiB
JavaScript
Raw Permalink Normal View History

2026-03-24 11:45:13 +08:00
import locationService from "./locationService";
/**
* 申请权限App端专用
* @param {string} permission - 要申请的权限
* @param {string} explain - 权限使用说明
* @returns {Promise<boolean>} - 返回是否授权成功
*/
function requestAppPermission(permission, explain) {
return new Promise((resolve) => {
// #ifdef APP-PLUS
if (plus.os.name === 'Android') {
// Android 平台
plus.android.requestPermissions(
[permission],
function(result) {
if(result.deniedPresent.includes(permission)) {
// 0:已授权,-1:未授权
resolve('deniedPresent');
}else if(result.deniedAlways.includes(permission)) {
// 0:已授权,-1:未授权
resolve('deniedAlways');
}else {
resolve(true);
}
},
explain || '需要此权限以提供完整服务'
);
} else {
console.log('iOS',plus.ios.requestPermissions)
// iOS 平台
plus.ios.requestPermissions(
// [permission],
['NSLocationAlwaysUsageDescription'],
function() {
console.log('iOS 没有直接的回调结果,需要检查状态')
// iOS 没有直接的回调结果,需要检查状态
checkPermissionStatus(permission).then(resolve);
},
explain || '需要此权限以提供完整服务'
);
}
// #endif
// #ifndef APP-PLUS
// 非App端直接返回true由各平台自己的逻辑处理
resolve(true);
// #endif
});
}
/**
* 检查权限状态iOS专用
*/
function checkPermissionStatus(permission) {
return new Promise((resolve) => {
if (plus.os.name === 'Android') {
// Android可以直接用requestPermissions的结果
resolve(true);
return;
}
console.log('[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]')
// iOS需要特殊处理
const authStatus = plus.ios.invoke('CLLocationManager', 'authorizationStatus');
// 0:未决定, 1:受限, 2:拒绝, 3:允许
resolve(authStatus === 3);
});
}
/**
* 统一权限请求方法
* @param {string} permission - 权限标识
* @param {string} explain - 说明文字
*/
export async function requestPermission(permission, explain) {
// #ifdef APP-PLUS
// App端处理
const type = await requestAppPermission(permission, explain);
console.log('type========',type)
if (type == 'deniedPresent') {
// uni.showModal({
// title: '权限申请',
// content: explain || '需要此权限以提供完整服务',
// confirmText: '去设置',
// success(res) {
// if (res.confirm) {
// // plus.runtime.openSettings();
// locationService.openAppSettings()
// }
// }
// });
uni.setStorageSync('locationDate',new Date());
return false;
}else if (type == 'deniedAlways') {
uni.setStorageSync('locationDate',new Date());
return false;
}else {
return true;
}
// return granted;
// #endif
// #ifdef MP-WEIXIN
// 微信小程序处理
return new Promise((resolve) => {
uni.authorize({
scope: permission,
success() { resolve(true); },
fail() { resolve(false); }
});
});
// #endif
// #ifdef H5
// H5处理部分权限可用
return Promise.resolve(true);
// #endif
}
export default {
requestPermission
}