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

打印 上一主题 下一主题

主题 784|帖子 784|积分 2352

背景:上架华为被拒了 
        1.您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机、存储)等权限,不符合华为应用市场审核标准。
测试步骤:点击我的-投诉反馈-上传附件-拍摄/从相册选择,申请相机、存储权限。点击我的钱包-充值-上传转款凭据-拍摄/从相册选择,申请相机、存储权限。
【文献参考】App权限判断和提示 - DCloud 插件市场
办理方案:permission.js 和getAuth.js
permission.js 完整代码
  1. var isIos  
  2. // #ifdef APP-PLUS  
  3. isIos = (plus.os.name == "iOS")  
  4. // #endif  
  5.   
  6. // 判断推送权限是否开启  
  7. function judgeIosPermissionPush() {  
  8.     var result = false;  
  9.     var UIApplication = plus.ios.import("UIApplication");  
  10.     var app = UIApplication.sharedApplication();  
  11.     var enabledTypes = 0;  
  12.     if (app.currentUserNotificationSettings) {  
  13.         var settings = app.currentUserNotificationSettings();  
  14.         enabledTypes = settings.plusGetAttribute("types");  
  15.         console.log("enabledTypes1:" + enabledTypes);  
  16.         if (enabledTypes == 0) {  
  17.             console.log("推送权限没有开启");  
  18.         } else {  
  19.             result = true;  
  20.             console.log("已经开启推送功能!")  
  21.         }  
  22.         plus.ios.deleteObject(settings);  
  23.     } else {  
  24.         enabledTypes = app.enabledRemoteNotificationTypes();  
  25.         if (enabledTypes == 0) {  
  26.             console.log("推送权限没有开启!");  
  27.         } else {  
  28.             result = true;  
  29.             console.log("已经开启推送功能!")  
  30.         }  
  31.         console.log("enabledTypes2:" + enabledTypes);  
  32.     }  
  33.     plus.ios.deleteObject(app);  
  34.     plus.ios.deleteObject(UIApplication);  
  35.     return result;  
  36. }  
  37.   
  38. // 判断定位权限是否开启  
  39. function judgeIosPermissionLocation() {  
  40.     var result = false;  
  41.     var cllocationManger = plus.ios.import("CLLocationManager");  
  42.     var status = cllocationManger.authorizationStatus();  
  43.     result = (status != 2)  
  44.     console.log("定位权限开启:" + result);  
  45.     // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation  
  46.     /* var enable = cllocationManger.locationServicesEnabled();  
  47.     var status = cllocationManger.authorizationStatus();  
  48.     console.log("enable:" + enable);  
  49.     console.log("status:" + status);  
  50.     if (enable && status != 2) {  
  51.         result = true;  
  52.         console.log("手机定位服务已开启且已授予定位权限");  
  53.     } else {  
  54.         console.log("手机系统的定位没有打开或未给予定位权限");  
  55.     } */  
  56.     plus.ios.deleteObject(cllocationManger);  
  57.     return result;  
  58. }  
  59.   
  60. // 判断麦克风权限是否开启  
  61. function judgeIosPermissionRecord() {  
  62.     var result = false;  
  63.     var avaudiosession = plus.ios.import("AVAudioSession");  
  64.     var avaudio = avaudiosession.sharedInstance();  
  65.     var permissionStatus = avaudio.recordPermission();  
  66.     console.log("permissionStatus:" + permissionStatus);  
  67.     if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {  
  68.         console.log("麦克风权限没有开启");  
  69.     } else {  
  70.         result = true;  
  71.         console.log("麦克风权限已经开启");  
  72.     }  
  73.     plus.ios.deleteObject(avaudiosession);  
  74.     return result;  
  75. }  
  76.   
  77. // 判断相机权限是否开启  
  78. function judgeIosPermissionCamera() {  
  79.     var result = false;  
  80.     var AVCaptureDevice = plus.ios.import("AVCaptureDevice");  
  81.     var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');  
  82.     console.log("authStatus:" + authStatus);  
  83.     if (authStatus == 3) {  
  84.         result = true;  
  85.         console.log("相机权限已经开启");  
  86.     } else {  
  87.         console.log("相机权限没有开启");  
  88.     }  
  89.     plus.ios.deleteObject(AVCaptureDevice);  
  90.     return result;  
  91. }  
  92.   
  93. // 判断相册权限是否开启  
  94. function judgeIosPermissionPhotoLibrary() {  
  95.     var result = false;  
  96.     var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");  
  97.     var authStatus = PHPhotoLibrary.authorizationStatus();  
  98.     console.log("authStatus:" + authStatus);  
  99.     if (authStatus == 3) {  
  100.         result = true;  
  101.         console.log("相册权限已经开启");  
  102.     } else {  
  103.         console.log("相册权限没有开启");  
  104.     }  
  105.     plus.ios.deleteObject(PHPhotoLibrary);  
  106.     return result;  
  107. }  
  108.   
  109. // 判断通讯录权限是否开启  
  110. function judgeIosPermissionContact() {  
  111.     var result = false;  
  112.     var CNContactStore = plus.ios.import("CNContactStore");  
  113.     var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);  
  114.     if (cnAuthStatus == 3) {  
  115.         result = true;  
  116.         console.log("通讯录权限已经开启");  
  117.     } else {  
  118.         console.log("通讯录权限没有开启");  
  119.     }  
  120.     plus.ios.deleteObject(CNContactStore);  
  121.     return result;  
  122. }  
  123.   
  124. // 判断日历权限是否开启  
  125. function judgeIosPermissionCalendar() {  
  126.     var result = false;  
  127.     var EKEventStore = plus.ios.import("EKEventStore");  
  128.     var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);  
  129.     if (ekAuthStatus == 3) {  
  130.         result = true;  
  131.         console.log("日历权限已经开启");  
  132.     } else {  
  133.         console.log("日历权限没有开启");  
  134.     }  
  135.     plus.ios.deleteObject(EKEventStore);  
  136.     return result;  
  137. }  
  138.   
  139. // 判断备忘录权限是否开启  
  140. function judgeIosPermissionMemo() {  
  141.     var result = false;  
  142.     var EKEventStore = plus.ios.import("EKEventStore");  
  143.     var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);  
  144.     if (ekAuthStatus == 3) {  
  145.         result = true;  
  146.         console.log("备忘录权限已经开启");  
  147.     } else {  
  148.         console.log("备忘录权限没有开启");  
  149.     }  
  150.     plus.ios.deleteObject(EKEventStore);  
  151.     return result;  
  152. }  
  153.   
  154. // Android权限查询  
  155. function requestAndroidPermission(permissionID) {  
  156.     return new Promise((resolve, reject) => {  
  157.         plus.android.requestPermissions(  
  158.             permissionID.split(","),  
  159.             // [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装  
  160.             function(resultObj) {  
  161.                 var result = 0;  
  162.                 for (var i = 0; i < resultObj.granted.length; i++) {  
  163.                     var grantedPermission = resultObj.granted[i];  
  164.                     console.log('已获取的权限:' + grantedPermission);  
  165.                     result = 1  
  166.                 }  
  167.                 for (var i = 0; i < resultObj.deniedPresent.length; i++) {  
  168.                     var deniedPresentPermission = resultObj.deniedPresent[i];  
  169.                     console.log('拒绝本次申请的权限:' + deniedPresentPermission);  
  170.                     result = 0  
  171.                 }  
  172.                 for (var i = 0; i < resultObj.deniedAlways.length; i++) {  
  173.                     var deniedAlwaysPermission = resultObj.deniedAlways[i];  
  174.                     console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);  
  175.                     result = -1  
  176.                 }  
  177.                 resolve(result);  
  178.                 // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限  
  179.                 // if (result != 1) {  
  180.                 // gotoAppPermissionSetting()  
  181.                 // }  
  182.             },  
  183.             function(error) {  
  184.                 console.log('申请权限错误:' + error.code + " = " + error.message);  
  185.                 resolve({  
  186.                     code: error.code,  
  187.                     message: error.message  
  188.                 });  
  189.             }  
  190.         );  
  191.     });  
  192. }  
  193.   
  194. // 使用一个方法,根据参数判断权限  
  195. function judgeIosPermission(permissionID) {  
  196.     if (permissionID == "location") {  
  197.         return judgeIosPermissionLocation()  
  198.     } else if (permissionID == "camera") {  
  199.         return judgeIosPermissionCamera()  
  200.     } else if (permissionID == "photoLibrary") {  
  201.         return judgeIosPermissionPhotoLibrary()  
  202.     } else if (permissionID == "record") {  
  203.         return judgeIosPermissionRecord()  
  204.     } else if (permissionID == "push") {  
  205.         return judgeIosPermissionPush()  
  206.     } else if (permissionID == "contact") {  
  207.         return judgeIosPermissionContact()  
  208.     } else if (permissionID == "calendar") {  
  209.         return judgeIosPermissionCalendar()  
  210.     } else if (permissionID == "memo") {  
  211.         return judgeIosPermissionMemo()  
  212.     }  
  213.     return false;  
  214. }  
  215.   
  216. // 跳转到**应用**的权限页面  
  217. function gotoAppPermissionSetting() {  
  218.     if (isIos) {  
  219.         var UIApplication = plus.ios.import("UIApplication");  
  220.         var application2 = UIApplication.sharedApplication();  
  221.         var NSURL2 = plus.ios.import("NSURL");  
  222.         // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");                  
  223.         var setting2 = NSURL2.URLWithString("app-settings:");  
  224.         application2.openURL(setting2);  
  225.   
  226.         plus.ios.deleteObject(setting2);  
  227.         plus.ios.deleteObject(NSURL2);  
  228.         plus.ios.deleteObject(application2);  
  229.     } else {  
  230.         // console.log(plus.device.vendor);  
  231.         var Intent = plus.android.importClass("android.content.Intent");  
  232.         var Settings = plus.android.importClass("android.provider.Settings");  
  233.         var Uri = plus.android.importClass("android.net.Uri");  
  234.         var mainActivity = plus.android.runtimeMainActivity();  
  235.         var intent = new Intent();  
  236.         intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
  237.         var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);  
  238.         intent.setData(uri);  
  239.         mainActivity.startActivity(intent);  
  240.     }  
  241. }  
  242.   
  243. // 检查系统的设备服务是否开启  
  244. // var checkSystemEnableLocation = async function () {  
  245. function checkSystemEnableLocation() {  
  246.     if (isIos) {  
  247.         var result = false;  
  248.         var cllocationManger = plus.ios.import("CLLocationManager");  
  249.         var result = cllocationManger.locationServicesEnabled();  
  250.         console.log("系统定位开启:" + result);  
  251.         plus.ios.deleteObject(cllocationManger);  
  252.         return result;  
  253.     } else {  
  254.         var context = plus.android.importClass("android.content.Context");  
  255.         var locationManager = plus.android.importClass("android.location.LocationManager");  
  256.         var main = plus.android.runtimeMainActivity();  
  257.         var mainSvr = main.getSystemService(context.LOCATION_SERVICE);  
  258.         var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);  
  259.         console.log("系统定位开启:" + result);  
  260.         return result  
  261.     }  
  262. }  
  263.   
  264. let permissionMap = {  
  265.     "android": {  
  266.         "CAMERA_EXTERNAL_STORAGE": {  
  267.             "name": "android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE,android.permission.CAMERA",  
  268.             "title": "相机/相册权限说明",  
  269.             "content": "便于您使用该功能上传您的图片/视频及用于更换头像、反馈问题、完善项目信息等场景中读取和写入相册和文件内容"  
  270.         },  
  271.         "CAMERA": {  
  272.             "name": "android.permission.CAMERA",  
  273.             "title": "相机权限说明",  
  274.             "content": "便于您使用该功能上传图片,用于更换头像、反馈问题、完善项目信息等场景中发送拍摄图片"  
  275.         },  
  276.         "EXTERNAL_STORAGE": {  
  277.             "name": "android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE",  
  278.             "title": "相册权限说明",  
  279.             "content": "便于您使用该功能上传您的照片/图片/视频及用于更换头像、反馈问题、完善项目信息等场景中读取和写入相册和文件内容"  
  280.         }  
  281.     },  
  282.     "ios": {}  
  283. }  
  284.   
  285. let view = null;  
  286.   
  287. function showViewDesc(permission) {  
  288.     let plat = isIos ? "ios" : "android";  
  289.     view = new plus.nativeObj.View('per-modal', {  
  290.         top: '0px',  
  291.         left: '0px',  
  292.         width: '100%',  
  293.         backgroundColor: 'rgba(0,0,0,0.2)',  
  294.         //opacity: '.9'     
  295.     })  
  296.     view.drawRect({  
  297.         color: '#fff',  
  298.         radius: '5px'  
  299.     }, {  
  300.         top: '30px',  
  301.         left: '5%',  
  302.         width: '90%',  
  303.         height: "100px",  
  304.     })  
  305.     view.drawText(permissionMap[plat][permission]["title"], {  
  306.         top: '40px',  
  307.         left: "8%",  
  308.         height: "30px"  
  309.     }, {  
  310.         align: "left",  
  311.         color: "#000",  
  312.     }, {  
  313.         onClick: function(e) {  
  314.             console.log(e);  
  315.         }  
  316.     })  
  317.     view.drawText(permissionMap[plat][permission]["content"], {  
  318.         top: '65px',  
  319.         height: "60px",  
  320.         left: "8%",  
  321.         width: "84%"  
  322.     }, {  
  323.         whiteSpace: 'normal',  
  324.         size: "14px",  
  325.         align: "left",  
  326.         color: "#656563"  
  327.     })  
  328.     view.show()  
  329. }  
  330.   
  331. function premissionCheck(permission) {  
  332.     return new Promise(async (resolve, reject) => {  
  333.         let plat = isIos ? "ios" : "android";  
  334.         if (isIos) { // ios  
  335.             // const camera = permission.judgeIosPermission("camera");//判断ios是否给予摄像头权限  
  336.             // //ios相册没权限,系统会自动弹出授权框  
  337.             // //let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限  
  338.             // if(camera){  
  339.             //     resolve();  
  340.             // }else{  
  341.             //     reject('需要开启相机使用权限');  
  342.             // }  
  343.             resolve(1)  
  344.         } else { // android  
  345.             let permission_arr = permissionMap[plat][permission]["name"].split(",");  
  346.             let flag = true;  
  347.             for(let i = 0;i<permission_arr.length;i++) {  
  348.                 let status = plus.navigator.checkPermission(permission_arr[i]);  
  349.                 if(status == "undetermined") {  
  350.                     flag = false;  
  351.                 }  
  352.             }  
  353.             console.log("flag", flag)  
  354.             if (flag == false) { // 未完全授权  
  355.                 showViewDesc(permission);  
  356.                 requestAndroidPermission(permissionMap[plat][permission]["name"]).then((res) => {  
  357.                     view.close();  
  358.                     if (res == -1) {  
  359.                         uni.showModal({  
  360.                             title: '提示',  
  361.                             content: '操作权限已被拒绝,请手动前往设置',  
  362.                             confirmText: "立即设置",  
  363.                             success: (res) => {  
  364.                                 if (res.confirm) {  
  365.                                     gotoAppPermissionSetting()  
  366.                                 }  
  367.                             }  
  368.                         })  
  369.                     }  
  370.                     resolve(res)  
  371.                 })  
  372.             } else {  
  373.                 resolve(1)  
  374.             }  
  375.         }  
  376.     })  
  377. }  
  378.   
  379.   
  380. module.exports = {  
  381.     judgeIosPermission: judgeIosPermission,  
  382.     requestAndroidPermission: requestAndroidPermission,  
  383.     checkSystemEnableLocation: checkSystemEnableLocation,  
  384.     gotoAppPermissionSetting: gotoAppPermissionSetting,  
  385.     premissionCheck: premissionCheck  
  386. }
复制代码
getAuth.js完整代码
  1. import permision from "@/js_sdk/wa-permission/permission.js"
  2. /**
  3. * 获取手机摄像头和图册权限
  4. * */
  5. const cameraAuthority = () => {
  6.         return new Promise(async (rel, rej) => {
  7.                 var platform =  uni.getSystemInfoSync().platform || 'android';
  8.                 if (platform == 'ios') {
  9.                         let camera = permision.judgeIosPermission("camera");//判断ios是否给予摄像头权限
  10.                         //ios相册没权限,系统会自动弹出授权框
  11.                         //let photoLibrary = permision.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
  12.                         if (camera) {
  13.                                 rel();
  14.                         } else {
  15.                                 rej('需要开启相机使用权限');
  16.                         }
  17.                 } else {
  18.                         // console.log('安卓')
  19.                         let camera = await permision.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
  20.                         let photoLibrary = await permision.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
  21.                         console.log('安卓',camera,photoLibrary)
  22.                         // if (camera == 0 || photoLibrary == 0) {
  23.                         //         rej('请同时开启相机和相册的使用权限');
  24.                         // } else if (camera == -1 || photoLibrary == -1) {
  25.                         //         //永久拒绝
  26.                         //         rej(false)
  27.                         // } else {
  28.                         //         rel();
  29.                         // }
  30.                 }
  31.         })
  32. }
  33. /**
  34. * 限安卓
  35. * 是否打开了手机定位
  36. * */
  37. const adressOpen = () => {
  38.         return permision.checkSystemEnableLocation();
  39. }
  40. /**
  41. * 限安卓
  42. * 获取位置信息权限
  43. * */
  44. const adressAuthority = () => {
  45.         return new Promise(async (rel, rej) => {
  46.                 let adress = await permision.requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION");//判断安卓是否有获取位置信息权限
  47.                 if (adress == 0) {
  48.                         rej('请开启定位权限');
  49.                 } else if (adress == -1) {
  50.                         //永久拒绝
  51.                         rej(false)
  52.                 } else {
  53.                         rel();
  54.                 }
  55.         })
  56. }
  57. /**
  58. * 限安卓
  59. * 获取拨打电话权限
  60. * */
  61. const cellPhoneAuthority = () => {
  62.         return new Promise(async (rel, rej) => {
  63.                 let adress = await permision.requestAndroidPermission("android.permission.CALL_PHONE");//拨打电话权限
  64.                 if (adress == 0) {
  65.                         rej('请开启拨打电话权限');
  66.                 } else if (adress == -1) {
  67.                         //永久拒绝
  68.                         rej(false)
  69.                 } else {
  70.                         rel();
  71.                 }
  72.         })
  73. }
  74. /**
  75. * 跳转到手机开启权限的界面
  76. * */
  77. const permissionSetting = () => {
  78.         permision.gotoAppPermissionSetting();
  79. }
  80. export {
  81.         cameraAuthority,
  82.         permissionSetting,
  83.         adressAuthority,
  84.         adressOpen,
  85.         cellPhoneAuthority
  86. }
复制代码
调用:
  1. <template>
  2.         <view class="uploadImg">
  3.                 <view class="upload" @tap="selectImg" v-else-if="!is_limit"
  4.                         :style="url.length > 0 ? 'margin-bottom:20rpx' : ''">
  5.                         <uni-icons type="camera-filled" color="#999" size="18" class="currentIcon">                    </uni-icons>
  6.                 </view>
  7.         </view>
  8. </template>
  9. <script>
  10. const app = getApp();
  11. import { cameraAuthority, permissionSetting } from "@/static/js/getAuth.js";
  12. import permision from "@/js_sdk/wa-permission/permission.js";
  13. export default {
  14.         props: {
  15.                 zb_file_show: {
  16.                         type: Boolean,
  17.                         default: false,
  18.                 },
  19.                 count: {
  20.                         type: Number,
  21.                         default: 10000
  22.                 },
  23.                 is_limit: {
  24.                         type: Boolean,
  25.                         default: false,
  26.                 }
  27.         },
  28.         data() {
  29.                 return {
  30.                         url: [],
  31.                 };
  32.         },
  33.         created() { },
  34.         methods: {
  35.                 clearImg(index) {
  36.                         this.url.splice(index, 1);
  37.                         this.$emit('clearImg')
  38.                 },
  39.                 async selectImg() {
  40.                         // 文档参考 https://blog.csdn.net/m0_46978096/article/details/116784053
  41.                         let _this = this;
  42.                         let platform = uni.getSystemInfoSync().platform;
  43.                         /*#ifdef APP-PLUS*/
  44.                         console.log('APP端:', platform)
  45.                         const isIosTrue = uni.getStorageSync('iosFirstCamera'); //是不是第一次开启相机
  46.                         //ios要先调用一下功能后,设置的权限列表里才会有该权限 ios和android分开判断
  47.                         if (platform == 'ios') {
  48.                                 if (isIosTrue == 'false') {
  49.                                         console.log('不是第一次')
  50.                                         cameraAuthority().then(e => {
  51.                                                 console.log(e,'then')
  52.                                                 _this.uploadImg();
  53.                                         }).catch(e => {
  54.                                                 console.log(e, 'catch');
  55.                                                 uni.showModal({
  56.                                                         title: '提示',
  57.                                                         content: '请先开启相机权限',
  58.                                                         success: function (res) {
  59.                                                                 if (res.confirm) {
  60.                                                                         permissionSetting();
  61.                                                                 }
  62.                                                         }
  63.                                                 });
  64.                                         })
  65.                                 } else {
  66.                                         console.log('是第一次')
  67.                                         uni.setStorageSync('iosFirstCamera', 'false'); //设为false就代表不是第一次开启相机
  68.                                         _this.uploadImg();
  69.                                 }
  70.                         } else {
  71.                                 var result = await  permision.premissionCheck("CAMERA_EXTERNAL_STORAGE");
  72.                                 console.log(result,'result')
  73.                                 if (result == 1) {
  74.                                         // 此处处理各自业务 如:uni.chooseImage  
  75.                                         console.log('有权限');
  76.                                         _this.uploadImg();
  77.                                 }
  78.                         }
  79.                         /*#endif*/
  80.                         /*#ifdef MP*/
  81.                         console.log('微信小程序端')
  82.                         _this.uploadImg();
  83.                         /*#endif*/
  84.                 },
  85.                 uploadImg() {
  86.                         // 获取年月日
  87.                         let year = new Date().getFullYear();
  88.                         let month = new Date().getMonth() + 1;
  89.                         let day = new Date().getDate();
  90.                         month = month < 10 ? "0" + month : month;
  91.                         day = day < 10 ? "0" + day : day;
  92.                         var that = this;
  93.                         uni.chooseImage({
  94.                                 sizeType: ["compressed"],
  95.                                 success(response) {
  96.                     console.log('你的逻辑')
  97.                                 },
  98.                         });
  99.                 },
  100.                 previewImage(index) {
  101.                         uni.previewImage({
  102.                                 urls: this.url,
  103.                                 current: index,
  104.                         });
  105.                 },
  106.                 previewImage1(data) {
  107.                         uni.previewImage({
  108.                                 urls: data,
  109.                         });
  110.                 }
  111.         },
  112. };
  113. </script>
  114. <style lang="less">
  115. .uploadImg {
  116.         display: flex;
  117.         align-items: center;
  118.         justify-content: flex-start;
  119.         flex-wrap: wrap;
  120.         .exampleBox {
  121.                 position: relative;
  122.                 margin-right: 20rpx;
  123.                 width: 106rpx;
  124.                 height: 106rpx;
  125.                 .exampleText {
  126.                         position: absolute;
  127.                         bottom: 0;
  128.                         left: 0;
  129.                         right: 0;
  130.                         height: 40rpx;
  131.                         background: rgba(0, 0, 0, 0.5);
  132.                         color: #fff;
  133.                         text-align: center;
  134.                         font-size: 22rpx;
  135.                         font-weight: 400;
  136.                 }
  137.         }
  138.         .imgView {
  139.                 width: 106rpx;
  140.                 height: 106rpx;
  141.                 display: block;
  142.                 position: relative;
  143.                 margin-right: 20rpx;
  144.                 margin-bottom: 20rpx;
  145.                 image {
  146.                         display: block;
  147.                         width: 106rpx;
  148.                         height: 106rpx;
  149.                 }
  150.                 .currentIcon {
  151.                         position: absolute;
  152.                         top: -11px;
  153.                         right: -11px;
  154.                 }
  155.         }
  156.         .upload {
  157.                 width: 106rpx;
  158.                 height: 106rpx;
  159.                 border: 1px dashed #d1d1d1;
  160.                 display: flex;
  161.                 align-items: center;
  162.                 justify-content: center;
  163.                 box-sizing: border-box;
  164.         }
  165. }
  166. </style>
复制代码
ios 需要修改mainfest文件:
  1. /* ios打包配置 */
  2.             "ios" : {
  3.                 "dSYMs" : false,
  4.                 "idfa" : false,
  5.                 "privacyDescription" : {
  6.                     // 可选,字符串类型,系统相册读取权限描述
  7.                     "NSPhotoLibraryUsageDescription" : "APP需要您的同意才能访问相册,以便于上传图片",
  8.                     //可选,字符串类型,系统相册写入权限描述
  9.                     "NSPhotoLibraryAddUsageDescription" : "APP需要您的同意才能添加图片,以便于上传图片",
  10.                     //可选,字符串类型,摄像头使用权限描述
  11.                     "NSCameraUsageDescription" : "APP需要您的同意才能访问相机,以便于上传图片,若不允许,您将无法使用上传功能"
  12.                 }
  13.             },
复制代码
运行效果:
     video(10)
      华为审核被拒,办理方案
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表