赞
踩
需求:微信小程序弹出权限询问前先弹出授权说明告知收集权限目的
权限判断封装到PermissionManager.js文件中:
const albumTips = "我们访问您的存储权限,为您提供使用与保存图片、视频、文件等服务。"; const audioTips = "我们访问您的麦克风权限,为您提供发送语音、视频问诊等服务。"; const locationTips = "我们访问您的位置信息,根据您的位置推荐最近医院就诊,以及为您提供医院导航、签到取号等服务。"; /** * 授权说明文案 * @param {*} permissionName 微信小程序权限名称 * @returns */ function getTips(permissionName) { if (permissionName == "scope.writePhotosAlbum" || permissionName == "uni.saveVideoToPhotosAlbum") { return albumTips; } else if (permissionName == "scope.record") { return audioTips; } else if (permissionName == "scope.userLocation") { return locationTips; } } /** * 授权说明文案 * @param {*} permissionName 微信小程序权限名称 * @returns */ function getPermissionName(permissionName) { if (permissionName == "scope.writePhotosAlbum" || permissionName == "uni.saveVideoToPhotosAlbum") { return "存储权限"; } else if (permissionName == "scope.record") { return "录音权限"; } else if (permissionName == "scope.userLocation") { return "locationTips"; } } //授权说明弹窗 function showPermissionTips(content, callback) { uni.showModal({ title: "授权说明", content: content, confirmText: "确定", showCancel: false, success: function(res) { if (res.confirm) { callback && callback(); } }, }); } //小程序判断授权 function judgePermission(permissionName, agreeCallback, refuseCallback) { if (permissionName == "scope.userLocation") { let systemInfo = uni.getSystemInfoSync(); console.log("systemInfo---", systemInfo); if (!systemInfo.locationEnabled) { //如果是定位权限并且系统设置未开启定位 uni.showModal({ title: "提示", content: "系统设置未开启GPS服务,请开启!", }); refuseCallback && refuseCallback(); return; } } uni.getSetting({ success(res) { console.log(res.authSetting) if (res.authSetting[permissionName] == undefined) { //1、首次授权 let tips = getTips(permissionName); showPermissionTips(tips, () => { agreeCallback && agreeCallback(); }) } else if (res.authSetting[permissionName] == true) { //2、之前同意了授权 agreeCallback && agreeCallback(); } else if (res.authSetting[permissionName] != undefined && res.authSetting[permissionName] != true) { //3、之前拒绝了权限 uni.showModal({ title: '提示', content: '您之前拒绝了' + getPermissionName(permissionName) + '权限,是否打开设置重新授权?', success: function(res) { if (res.confirm) { //打开权限设置页 uni.openSetting({ success: function(res) { console.log(res) if (res.authSetting[permissionName] == true) { //用户在设置页打开了权限 uni.showToast({ title: '授权成功', icon: 'none' }) agreeCallback && agreeCallback(); } else { //用户在设置页未打开权限 uni.showToast({ title: '授权失败', icon: 'none', }) refuseCallback && refuseCallback(); } } }) } else if (res.cancel) { refuseCallback && refuseCallback(); } } }); } } }) } module.exports = { judgePermission: judgePermission, }
这里以 uni.saveImageToPhotosAlbum 这个api为例,在使用uni.saveImageToPhotosAlbum这个api前先判断权限:
permissionManager.judgePermission("scope.writePhotosAlbum", () => { uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function () { uni.showToast({ title: "保存成功", icon: "none", }); }, fail: function () { uni.showToast({ title: "保存失败", icon: "none", }); }, }); },()=>{});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。