import locationService from "./locationService"; /** * 申请权限(App端专用) * @param {string} permission - 要申请的权限 * @param {string} explain - 权限使用说明 * @returns {Promise} - 返回是否授权成功 */ 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 }