uni-app之微信小程序权限判断

需求:微信小程序弹出权限询问前先弹出授权说明告知收集权限目的

权限判断封装到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",
        });
      },
    });
  },()=>{});		

你可能感兴趣的:(uni-app,微信小程序,uni-app)