uniapp 安卓,ios 相机权限,华为审核被拒解决方案
背景:上架华为被拒了
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 = monthios 需要修改mainfest文件:
/* ios打包配置 */ "ios" : { "dSYMs" : false, "idfa" : false, "privacyDescription" : { // 可选,字符串类型,系统相册读取权限描述 "NSPhotoLibraryUsageDescription" : "APP需要您的同意才能访问相册,以便于上传图片", //可选,字符串类型,系统相册写入权限描述 "NSPhotoLibraryAddUsageDescription" : "APP需要您的同意才能添加图片,以便于上传图片", //可选,字符串类型,摄像头使用权限描述 "NSCameraUsageDescription" : "APP需要您的同意才能访问相机,以便于上传图片,若不允许,您将无法使用上传功能" } },运行效果:
video(10)
华为审核被拒,解决方案
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!