当用户点击拒绝时,会一直执行fail()函数,除非手动点击设置授权,这样很不方便

最近项目中遇到这种情况,必须得让用户拥有好的体验

 

下面来看代码,主要是调用几个API,就拿录音授权举个例子

//这个是写在点击事件里面的
let that = this
uni.authorize({
	scope: 'scope.record',//这里选择scope.(录音、位置、用户信息...都可以)
	success() { //1.1 允许授权
		that.timer = setInterval(that.startTimer, 1000),//录音定时器
		recorderManager.start()//开始录音
	},
	fail() { // 拒绝授权
		uni.showModal({
		    content: '检测到您没打开录音功能权限,是否去设置打开?',
			confirmText: "确认",
			cancelText: '取消',
			success: (res) => {
				if (res.confirm) {
					uni.openSetting({//opensetting是调起设置页面的
						success: (res) => {
							console.log(res.authSetting);
								if(res.authSetting == true){//判断res.authsetting的值是true还是false
									that.timer = setInterval(that.startTimer,1000),
							               recorderManager.start()
								}else{
									console.log("什么也不做");
									}	
								}
							})
					} else {
						console.log('取消');
						return false;
					}
				}
			})
			return false;
		}
	})

这里面的弹窗提示

 点击确认就会转到设置页面,之后可以打开权限,如果用户还是不打开,当然他还是用不了功能的

点击取消,也是没有权限,功能也无法执行的

这是设置页面

 这个问题主要还是对API调用不清楚、不熟悉,多看一下官方的文档介绍

#uni.authorize(OBJECT)

        提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。如果用户之前拒绝了授权,此接口会直接进入失败回调,一般搭配uni.getSettinguni.openSetting使用

 

#uni.openSetting(OBJECT)

调起客户端小程序设置界面,返回用户设置的操作结果。

 

 文章仅限参考 如有错误请及时指出或补充

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐