行业知识
uniapp 安卓,ios 相机权限,华为审核被拒解决方案
2026-11-02 10:50:14
来源:互联网转载
背景:上架华为被拒了
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/116784053let _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)
华为审核被拒,解决方案
下一篇:万网域名怎么注册?