使用uniapp开发时遇到的相机授权问题

1,769 阅读1分钟

问题叙述:

使用uniapp开发H5和wgt小程序时。需要用户进行实人认证。场景需要使用摄像头在ios内正常使用。但是在Android下就无法使用了。

应用场景:

开发中使用阿里的实人认证功能进行人脸识别认证功能。需要用户进行扫脸。

解决办法:

使用uni插件库中的插件引入到项目中。使用插件的方法进行用户授权的判断操作。

项目目录如下:

┌─components
├─js_sdk
│  └─wa-permission
│     └─permission.js
├─pages
│  └─index
│     └─index.vue
├─static
├─main.js
├─App.vue
├─manifest.json
└─pages.json

index.vue中引入插件import permision from "@/js_sdk/wa-permission/permission.js"

使用方法如下:

methods:{
    // 判断Android权限是否开启
    async requestAndroidPermission(permisionID) {
        var result = await permision.requestAndroidPermission(permisionID);
        return result;    
    },
    attestation(){
        // #ifdef APP-PLUS
        uni.getSystemInfo({
            success({ osName }) {
                switch (osName){
                    case 'ios':
                        if(permision.judgeIosPermission("camera")){
                            // 已获得授权
                            let uri = process.uniEnv.interviewUrl + '/miniapp/nft/pages/user/real';
                            uni.navigateTo({
                                url: '/pages/webView/jumpAuthentication?jumpUrl=' + uri
                            });
			}else{
                            // 未授权
                            permision.gotoAppPermissionSetting();//引导用户去打开设置授权
			}
                        break;
                    case 'android':
                        _self.requestAndroidPermission('android.permission.CAMERA')
			.then(result => {
                            switch (result){
                                case -1:
                                    // 被永久拒绝权限
                                    _self.$u.toast('您拒绝授权相机功能,请到设置中开启后再次进行认证。');
                                    break;
                                case 0:
                                    // 未获得授权
                                    _self.$u.toast('您未授权相机功能,请授权后再次进行认证。');
                                    break;
                                case 1:
                                    // 已获得授权
                                    let uri = process.uniEnv.interviewUrl + '/miniapp/nft/pages/user/real';
                                    uni.navigateTo({
                                        url: '/pages/webView/jumpAuthentication?jumpUrl=' + uri
                                    });
                                    break;
                                default:
                                    break;
                            }
                        })
                        break;
                    default:
                        break;
               }
            }
        });
        // #endif
    },
}

参考资料:ext.dcloud.net.cn/plugin?id=5…