当前位置: 首页 > news >正文

解决 uniapp 开发中权限申请同步告知目的问题| 华为应用商店上架审核问题解决

管控背景

根据《工业和信息化部关于进一步提升移动互联网应用服务能力的通知》加强个人信息保护章节要求合理申请使用权限:在调用终端相册、通讯录、位置等权限时,同步告知用户申请该权限的目的。

管控解析

  • 管控范围:该规则适用于以下敏感权限申请行为--电话、通讯录、定位、短信、麦克风(录音)、相机、存储、日历、身体传感器、通话记录、健康运动;
  • 同步告知要求:需在应用内,权限弹窗申请的同时,告知权限申请的使用目的。

点击整改规范查看原文

实现方案

使用uniapp官方文档中的监听权限申请(uni.createRequestPermissionListener())

  1. 首先封装一个组件permisonPopup.vue
<template>
	<view>
		<view class="popup-container">
			<view class="permission-alert" id="permission-alert">
				<text style="font-size: 40rpx; margin-bottom: 20rpx; display: block">{{ permisionName }}权限申请说明:</text>
				<text>{{ purpose }}</text>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	props: {
		permisionName: {
			type: String,
			default: '' // 默认空文本
		},
		purpose: {
			type: String,
			default: '' // 默认按钮文本
		}
	},
	methods: {}
};
</script>

<style scoped>

.popup-container {
	position: fixed;
	top: 10%;
	left: 50%;
	width: 90%;
	transform: translate(-50%, -50%);
	z-index: 99999999999999999;
	background-color: #b5c3d2;
	border-radius: 32rpx;
	padding: 24rpx;
	color: #000;
	padding-top: 40rpx;
}
</style>

存在问题点:由于系统权限弹出层级较高,无法覆盖,具体页面使用可能会导致看不清,目前没有好的解决方法,暂时使用更改相对颜色解决,根据个人使用场景自行更改背景色和字体颜色

        2. 封装通用方法watchPermision.js

export default {
	install(Vue) {
		// 在 Vue 原型上挂载全局方法
		Vue.prototype.$watchPermission = function(callback) {
			if (uni.getSystemInfoSync().platform === 'android') {
				const permissionListener = uni.createRequestPermissionListener();

				permissionListener.onConfirm((e) => {
					console.log('Permission Confirmed:', e);
					if (callback && typeof callback === 'function') {
						callback('confirmed', e);
					}
				});

				permissionListener.onComplete((e) => {
					console.log('Permission Check Complete:', e);
					if (callback && typeof callback === 'function') {
						callback('complete', e);
					}
				});
			} else {
				callback('complete');
			}
		};


	}
};

        3. 在main.js中全局引入,方便每个页面可直接使用

import watchPermis from '@/components/permsionWatch/watchPermision.js';
Vue.use(watchPermis)
import watchPermision from '@/components/permsionWatch/permisonPopup.vue';
Vue.component('watchPermision', watchPermision);

        4. 使用方法

<template>
	<view>
		<watchPermision v-if="permissionsStatus" :permisionName="permisionName" :purpose="purpose" />
	</view>
</template>

<script>
export default {
	data() {
		return {
			permissionsStatus: false, //控制弹窗是否展示
			permisionName: '', //权限名字
			purpose: '', //授权目的
			
		};
	},

	onLoad() {},

	onShow() {
		this.watchPermission('相机', '为了确保您能够顺利使用扫码功能做什么事,请授权相机权限。');
//如果是一进入页面就调用权限,请根据自己情况放在对应的生命周期,一定要放在授权之前调用
		
	},
	onReady() {},
	methods: {
		watchPermission(name, use) {
			this.$watchPermission((status, e) => {
				if (status === 'confirmed') {
					this.permissionsStatus = true;
					this.permisionName = name;
					this.purpose = use;
				} else if (status === 'complete') {
					this.permissionsStatus = false;
				}
			});
		},

		


		scanByGallery() {
			this.watchPermission('相册', '为了确保您能够顺利使用什么东西做什么事,请授权相册权限。');
			//调用权限逻辑xxx
		},

		

		
	}
};
</script>

<style lang="scss">

</style>

用法说明:在需要使用的页面添加watchPermission()方法,在授权前调用,一定要在每个授权前添加this.watchPermission('权限名称','使用目的')

最终效果图:
 

相关文章:

  • 安装和管理最新的Python3环境(以Mac为例)
  • Docker 数据卷管理
  • Spring 如何管理 Bean 的生命周期?
  • 11--华为防火墙Easy-IP实现原理与配置全解:从“翻译官“到“流量导演“的奇幻之旅(包你看一遍全记住)
  • Django REST Framework 请求封装源码解析与实现流程
  • 1、环境初始化--Linux安装dockerCE
  • Java 集合框架:从数据结构到性能优化,全面解析集合类
  • JavaScript基础-API 和 Web API
  • HIVE安装(详细教程)
  • Python实战(4)-网络编程
  • Liunx系统Microsoft SQL Server数据库还原
  • datawhale组队学习-大语言模型-task5:主流模型架构及新型架构
  • CentOS与Rocky 命令区别
  • python如何获取html中附件链接,并下载保存附件
  • 1.向量数据库milvus standalone单机版搭建
  • MobaXterm:全能终端工具如何重新定义远程开发与运维效率?
  • Linux 常用命令 - last 【显示历史登录用户列表】
  • 在coze工作流中将数据回写到飞书表格
  • ubuntu部署运行xinference全精度对话deepseek本地部署图文教程
  • WPS宏开发手册——使用、工程、模块介绍
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 水利部:山西、陕西等地旱情将持续
  • 广州下调个人住房公积金贷款利率
  • 黄晨光任中科院空间应用工程与技术中心党委书记、副主任
  • 上海科创“八杰”赋能新兴产业链:硬核科技,形成良好盈利模式
  • 美联储主席:不打算先发制人地降息,将继续观望