uniapp 安卓,ios 相机权限,华为审核被拒解决方案

2024-06-04 7100阅读

背景:上架华为被拒了 

        1.您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机、存储)等权限,不符合华为应用市场审核标准。

测试步骤:点击我的-投诉反馈-上传附件-拍摄/从相册选择,申请相机、存储权限。点击我的钱包-充值-上传转款凭证-拍摄/从相册选择,申请相机、存储权限。

【文献参考】App权限判断和提示 - DCloud 插件市场

解决方案:permission.js 和getAuth.js

permission.js 完整代码

var isIos  
// #ifdef APP-PLUS  
isIos = (plus.os.name == "iOS")  
// #endif  
  
// 判断推送权限是否开启  
function judgeIosPermissionPush() {  
    var result = false;  
    var UIApplication = plus.ios.import("UIApplication");  
    var app = UIApplication.sharedApplication();  
    var enabledTypes = 0;  
    if (app.currentUserNotificationSettings) {  
        var settings = app.currentUserNotificationSettings();  
        enabledTypes = settings.plusGetAttribute("types");  
        console.log("enabledTypes1:" + enabledTypes);  
        if (enabledTypes == 0) {  
            console.log("推送权限没有开启");  
        } else {  
            result = true;  
            console.log("已经开启推送功能!")  
        }  
        plus.ios.deleteObject(settings);  
    } else {  
        enabledTypes = app.enabledRemoteNotificationTypes();  
        if (enabledTypes == 0) {  
            console.log("推送权限没有开启!");  
        } else {  
            result = true;  
            console.log("已经开启推送功能!")  
        }  
        console.log("enabledTypes2:" + enabledTypes);  
    }  
    plus.ios.deleteObject(app);  
    plus.ios.deleteObject(UIApplication);  
    return result;  
}  
  
// 判断定位权限是否开启  
function judgeIosPermissionLocation() {  
    var result = false;  
    var cllocationManger = plus.ios.import("CLLocationManager");  
    var status = cllocationManger.authorizationStatus();  
    result = (status != 2)  
    console.log("定位权限开启:" + result);  
    // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation  
    /* var enable = cllocationManger.locationServicesEnabled();  
    var status = cllocationManger.authorizationStatus();  
    console.log("enable:" + enable);  
    console.log("status:" + status);  
    if (enable && status != 2) {  
        result = true;  
        console.log("手机定位服务已开启且已授予定位权限");  
    } else {  
        console.log("手机系统的定位没有打开或未给予定位权限");  
    } */  
    plus.ios.deleteObject(cllocationManger);  
    return result;  
}  
  
// 判断麦克风权限是否开启  
function judgeIosPermissionRecord() {  
    var result = false;  
    var avaudiosession = plus.ios.import("AVAudioSession");  
    var avaudio = avaudiosession.sharedInstance();  
    var permissionStatus = avaudio.recordPermission();  
    console.log("permissionStatus:" + permissionStatus);  
    if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {  
        console.log("麦克风权限没有开启");  
    } else {  
        result = true;  
        console.log("麦克风权限已经开启");  
    }  
    plus.ios.deleteObject(avaudiosession);  
    return result;  
}  
  
// 判断相机权限是否开启  
function judgeIosPermissionCamera() {  
    var result = false;  
    var AVCaptureDevice = plus.ios.import("AVCaptureDevice");  
    var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');  
    console.log("authStatus:" + authStatus);  
    if (authStatus == 3) {  
        result = true;  
        console.log("相机权限已经开启");  
    } else {  
        console.log("相机权限没有开启");  
    }  
    plus.ios.deleteObject(AVCaptureDevice);  
    return result;  
}  
  
// 判断相册权限是否开启  
function judgeIosPermissionPhotoLibrary() {  
    var result = false;  
    var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");  
    var authStatus = PHPhotoLibrary.authorizationStatus();  
    console.log("authStatus:" + authStatus);  
    if (authStatus == 3) {  
        result = true;  
        console.log("相册权限已经开启");  
    } else {  
        console.log("相册权限没有开启");  
    }  
    plus.ios.deleteObject(PHPhotoLibrary);  
    return result;  
}  
  
// 判断通讯录权限是否开启  
function judgeIosPermissionContact() {  
    var result = false;  
    var CNContactStore = plus.ios.import("CNContactStore");  
    var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);  
    if (cnAuthStatus == 3) {  
        result = true;  
        console.log("通讯录权限已经开启");  
    } else {  
        console.log("通讯录权限没有开启");  
    }  
    plus.ios.deleteObject(CNContactStore);  
    return result;  
}  
  
// 判断日历权限是否开启  
function judgeIosPermissionCalendar() {  
    var result = false;  
    var EKEventStore = plus.ios.import("EKEventStore");  
    var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);  
    if (ekAuthStatus == 3) {  
        result = true;  
        console.log("日历权限已经开启");  
    } else {  
        console.log("日历权限没有开启");  
    }  
    plus.ios.deleteObject(EKEventStore);  
    return result;  
}  
  
// 判断备忘录权限是否开启  
function judgeIosPermissionMemo() {  
    var result = false;  
    var EKEventStore = plus.ios.import("EKEventStore");  
    var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);  
    if (ekAuthStatus == 3) {  
        result = true;  
        console.log("备忘录权限已经开启");  
    } else {  
        console.log("备忘录权限没有开启");  
    }  
    plus.ios.deleteObject(EKEventStore);  
    return result;  
}  
  
// Android权限查询  
function requestAndroidPermission(permissionID) {  
    return new Promise((resolve, reject) => {  
        plus.android.requestPermissions(  
            permissionID.split(","),  
            // [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装  
            function(resultObj) {  
                var result = 0;  
                for (var i = 0; i  {  
        let plat = isIos ? "ios" : "android";  
        if (isIos) { // ios  
            // const camera = permission.judgeIosPermission("camera");//判断ios是否给予摄像头权限  
            // //ios相册没权限,系统会自动弹出授权框  
            // //let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限  
            // if(camera){  
            //     resolve();  
            // }else{  
            //     reject('需要开启相机使用权限');  
            // }  
            resolve(1)  
        } else { // android  
            let permission_arr = permissionMap[plat][permission]["name"].split(",");  
            let flag = true;  
            for(let i = 0;i {  
                    view.close();  
                    if (res == -1) {  
                        uni.showModal({  
                            title: '提示',  
                            content: '操作权限已被拒绝,请手动前往设置',  
                            confirmText: "立即设置",  
                            success: (res) => {  
                                if (res.confirm) {  
                                    gotoAppPermissionSetting()  
                                }  
                            }  
                        })  
                    }  
                    resolve(res)  
                })  
            } else {  
                resolve(1)  
            }  
        }  
    })  
}  
  
  
module.exports = {  
    judgeIosPermission: judgeIosPermission,  
    requestAndroidPermission: requestAndroidPermission,  
    checkSystemEnableLocation: checkSystemEnableLocation,  
    gotoAppPermissionSetting: gotoAppPermissionSetting,  
    premissionCheck: premissionCheck  
}

getAuth.js完整代码

import permision from "@/js_sdk/wa-permission/permission.js"
/**
 * 获取手机摄像头和图册权限
 * */
const cameraAuthority = () => {
	return new Promise(async (rel, rej) => {
		var platform =  uni.getSystemInfoSync().platform || 'android';
		if (platform == 'ios') {
			let camera = permision.judgeIosPermission("camera");//判断ios是否给予摄像头权限
			//ios相册没权限,系统会自动弹出授权框
			//let photoLibrary = permision.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
			if (camera) {
				rel();
			} else {
				rej('需要开启相机使用权限');
			}
		} else {
			// console.log('安卓')
			let camera = await permision.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
			let photoLibrary = await permision.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
			console.log('安卓',camera,photoLibrary)
			// if (camera == 0 || photoLibrary == 0) {
			// 	rej('请同时开启相机和相册的使用权限');
			// } else if (camera == -1 || photoLibrary == -1) {
			// 	//永久拒绝
			// 	rej(false)
			// } else {
			// 	rel();
			// }
		}
	})
}
/**
 * 限安卓
 * 是否打开了手机定位
 * */
const adressOpen = () => {
	return permision.checkSystemEnableLocation();
}
/**
 * 限安卓
 * 获取位置信息权限
 * */
const adressAuthority = () => {
	return new Promise(async (rel, rej) => {
		let adress = await permision.requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION");//判断安卓是否有获取位置信息权限
		if (adress == 0) {
			rej('请开启定位权限');
		} else if (adress == -1) {
			//永久拒绝
			rej(false)
		} else {
			rel();
		}
	})
}
/**
 * 限安卓
 * 获取拨打电话权限
 * */
const cellPhoneAuthority = () => {
	return new Promise(async (rel, rej) => {
		let adress = await permision.requestAndroidPermission("android.permission.CALL_PHONE");//拨打电话权限
		if (adress == 0) {
			rej('请开启拨打电话权限');
		} else if (adress == -1) {
			//永久拒绝
			rej(false)
		} else {
			rel();
		}
	})
}
/**
 * 跳转到手机开启权限的界面
 * */
const permissionSetting = () => {
	permision.gotoAppPermissionSetting();
}
export {
	cameraAuthority,
	permissionSetting,
	adressAuthority,
	adressOpen,
	cellPhoneAuthority
}

调用:

	
		
			                    
		
	


const app = getApp();
import { cameraAuthority, permissionSetting } from "@/static/js/getAuth.js";
import permision from "@/js_sdk/wa-permission/permission.js";
export default {
	props: {
		zb_file_show: {
			type: Boolean,
			default: false,
		},
		count: {
			type: Number,
			default: 10000
		},
		is_limit: {
			type: Boolean,
			default: false,
		}
	},
	data() {
		return {
			url: [],
		};
	},
	created() { },
	methods: {
		clearImg(index) {
			this.url.splice(index, 1);
			this.$emit('clearImg')
		},
		async selectImg() {
			// 文档参考 https://blog.csdn.net/m0_46978096/article/details/116784053
			let _this = this;
			let platform = uni.getSystemInfoSync().platform;
			/*#ifdef APP-PLUS*/
			console.log('APP端:', platform)
			const isIosTrue = uni.getStorageSync('iosFirstCamera'); //是不是第一次开启相机
			//ios要先调用一下功能后,设置的权限列表里才会有该权限 ios和android分开判断
			if (platform == 'ios') {
				if (isIosTrue == 'false') {
					console.log('不是第一次')
					cameraAuthority().then(e => {
						console.log(e,'then')
						_this.uploadImg();
					}).catch(e => {
						console.log(e, 'catch');
						uni.showModal({
							title: '提示',
							content: '请先开启相机权限',
							success: function (res) {
								if (res.confirm) {
									permissionSetting();
								}
							}
						});
					})
				} else {
					console.log('是第一次')
					uni.setStorageSync('iosFirstCamera', 'false'); //设为false就代表不是第一次开启相机
					_this.uploadImg();
				}
			} else {
				var result = await  permision.premissionCheck("CAMERA_EXTERNAL_STORAGE");
				console.log(result,'result')
				if (result == 1) {
					// 此处处理各自业务 如:uni.chooseImage  
					console.log('有权限');
					_this.uploadImg();
				}
			}
			/*#endif*/
			/*#ifdef MP*/
			console.log('微信小程序端')
			_this.uploadImg();
			/*#endif*/
		},
		uploadImg() {
			// 获取年月日
			let year = new Date().getFullYear();
			let month = new Date().getMonth() + 1;
			let day = new Date().getDate();
			month = month  

ios 需要修改mainfest文件:

 /* ios打包配置 */
            "ios" : {
                "dSYMs" : false,
                "idfa" : false,
                "privacyDescription" : {
                    // 可选,字符串类型,系统相册读取权限描述
                    "NSPhotoLibraryUsageDescription" : "APP需要您的同意才能访问相册,以便于上传图片",
                    //可选,字符串类型,系统相册写入权限描述
                    "NSPhotoLibraryAddUsageDescription" : "APP需要您的同意才能添加图片,以便于上传图片",
                    //可选,字符串类型,摄像头使用权限描述
                    "NSCameraUsageDescription" : "APP需要您的同意才能访问相机,以便于上传图片,若不允许,您将无法使用上传功能"
                }
            },

运行效果:

video(10)

华为审核被拒,解决方案


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]