uniapp如何授权多个权限

 一:介绍

最近在使用uniapp做一个视频录制的功能,需要获取麦克风权限和相机权限,本人是第一次写uniapp开发,所以在获取权限这边踩了一些坑,比如“”需要哪些调用api和如何合理引导用户设置权限等问题。

二:uni.getSetting()、uni.authorize()、uni.openSetting()

1、这里用到的api有uni.getSetting()、uni.authorize()、可以放在mounted里面,用户首次进入有需要的页面时,可以利用这两个api判断是否拥有此权限和唤起设置权限的弹窗。

uni.getSetting({
					success: async function(res) {
						that.hasMicPermission = res.authSetting['scope.record'];
						that.hasCameraPermission = res.authSetting['scope.camera'];
						if (!that.hasMicPermission) {
							uni.authorize({
								scope: "scope.record",
								success(res) {
									that.hasMicPermission = true;
									console.log("同意麦克风授权");
								},
								fail(err) {
									console.log("拒绝麦克风授权");
								}
							})
						}
						if (!that.hasCameraPermission) {
							uni.authorize({
								scope: "scope.camera",
								success(res) {
									that.hasCameraPermission = true;
									console.log("同意相机授权");
								},
								fail() {
									console.log("拒绝相机授权");
								}
							})
						}
					}
				});

2、问题来了,假如用户不小心点了拒绝,下次再进来是无法唤醒设置权限弹窗的。所以下面我们还需要利用一个api:uni.openSetting()。这个api可以打开权限的设置,让用户自己去重新设置权限。比如当用点击某个按钮后,判断是否有权限,没有则手动去引导用户开启权限。

            // 手动调用权限
			handleRequestPermission(){
				const that = this;
				uni.showModal({
					title: '提示',
					content: '缺少相关权限,是否前往开启?',
					success(res) {
						if (res.confirm) {
							// 点击确定按钮,尝试拉起权限
							uni.openSetting({
								success(res) {
									//相机
									if (res.authSetting['scope.camera']) {
										that.hasCameraPermission = true;
									} else {
										uni.showToast({
											title: "摄像头权限未开启",
											icon: "none",
											duration:2000
										});
									}
									//麦克风
									if (res.authSetting['scope.record']) {
										that.hasMicPermission = true;
									} else {
										console.log('拒绝麦克风权限');
										uni.showToast({
											title: "麦克风权限未开启",
											icon: "none",
											duration:2000
										});
									}
								},
								fail(err) {
									uni.navigateBack()
								}
							});
						}
					},
				});
			},
			

三:完整代码

<template>
    <div>
        <button @click="handleRequestPermission">拉取权限</button>
    </div>
</template>
<script>
export default {
    data() {
        return {
            hasMicPermission: false, //录音权限
            hasCameraPermission: false, //摄像头权限
        }
    },
    methods: {
        checkPermission() {
            const that = this;
            // 检查相机麦克风权限 
            // #ifdef MP
            uni.getSetting({
                success: async function (res) {
                    that.hasMicPermission = res.authSetting['scope.record'];
                    that.hasCameraPermission = res.authSetting['scope.camera'];
                    if (!that.hasMicPermission) {
                        uni.authorize({
                            scope: "scope.record",
                            success(res) {
                                that.hasMicPermission = true;
                                console.log("同意麦克风授权");
                            },
                            fail(err) {
                                console.log("拒绝麦克风授权");
                            }
                        })
                    }
                    if (!that.hasCameraPermission) {
                        uni.authorize({
                            scope: "scope.camera",
                            success(res) {
                                that.hasCameraPermission = true;
                                console.log("同意相机授权");
                            },
                            fail() {
                                console.log("拒绝相机授权");
                            }
                        })
                    }
                }
            });
            // #endif
        },
        // 操作时候,判断是否有相关权限
        handleRequestPermission() {
            if (this.hasMicPermission && this.hasCameraPermission) return;
            const that = this;
            uni.showModal({
                title: '提示',
                content: '缺少相关权限,是否前往开启?',
                success(res) {
                    if (res.confirm) {
                        // 点击确定按钮,尝试拉起权限
                        uni.openSetting({
                            success(res) {
                                console.log(res)
                                //相机
                                if (res.authSetting['scope.camera']) {
                                    that.hasCameraPermission = true;
                                } else {
                                    uni.showToast({
                                        title: "摄像头权限未开启",
                                        icon: "none"
                                    });
                                }
                                //麦克风
                                if (res.authSetting['scope.record']) {
                                    that.hasMicPermission = true;
                                } else {
                                    uni.showToast({
                                        title: "麦克风权限未开启",
                                        icon: "none"
                                    });
 
                                }
                            },
                            fail(err) {
                                uni.navigateBack()
                            }
                        });
                    }
                },
            });
        },
    },
    mounted() {
        // 检查权限
        this.checkPermission();
    }
}
</script>

对于UniApp来说,原生插件(puls)和权限授权是两个不同的概念。我来分别解答你的问题: 1. 原生插件(puls):UniApp是基于Vue.js开发的跨平台框架,可以通过原生插件(puls)来扩展其功能,实现一些特定平台的原生功能。在使用原生插件之前,需要先在UniApp项目中引入对应平台的插件,并进行相关配置。 具体的步骤如下: - 在UniApp项目的`manifest.json`文件中,找到`uni_modules`字段,添加对应平台的插件依赖,例如: ```json "uni_modules": { "plus": { "version": "1.0.0", "path": "uni_modules/plus" } } ``` - 在需要使用原生插件的页面或组件中,通过`uni.requireNativePlugin`方法引入插件,例如: ```javascript import { uniRequireNativePlugin } from '@dcloudio/uni-helper' const plugin = uniRequireNativePlugin('plus') ``` - 根据具体插件的文档和API,调用相应的方法来使用插件功能。 2. UniApp权限授权:在UniApp中,可以通过`uni.authorize`方法来进行权限授权操作。该方法用于向用户请求特定的权限,并返回用户是否同意授权。 具体的代码示例如下: ```javascript uni.authorize({ scope: 'scope.camera', success() { console.log('授权成功') }, fail() { console.log('授权失败') } }) ``` 在以上代码中,`scope`参数表示要请求的权限,可以根据具体需要修改。授权成功时,会执行`success`回调函数,授权失败时,会执行`fail`回调函数。 需要注意的是,不同平台的权限名称可能有所不同,可以参考各个平台的文档来获取正确的权限名称。 希望以上解答对你有帮助,如有更多问题,请继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值