uniapp + vue3微信小程序开发(5)授权

不知道大家在小程序授权的时候,会不会点击拒绝授权,然后第二次进来,哦豁。。授权框就在也出不来了,这种问题,在很多线上正在使用的小程序也会出现的问题,所以说,大家貌似都不太注意这方面问题,下面就是我对这问题的解决方法

1、授权方式

很清楚能看到,我是将所有小程序要授权的scope,都放在Map类里,然后先 getSetting,获取当前小程序中所有被授权的模块(切记: res.authSetting是个对象,里面所有被授权的模块都是为true哦,意思就是未被授权或未申请授权的模块压根不会出现在res.authSetting中) ,如果拒绝授权,那么会将弹起一个model框,引导用户去系统里手动设置授权,uni.openSetting就是去手动授权的方式,否则的话,都会进入失败回调。

有趣的现象:

我在openSetting时,遇到这样一种,就是在进入系统手动设置时,一直在显示加载,貌似卡了,然后可能等了一分钟都没有加载出来,我就只有点击左上角退出,那么此时也是被判定为取消授权哦,进入失败回调

2、调用方式

2.1、地理位置调用

放在onLoad是为了一进来就进行调用,当你之前已经授权过了,就会直接进入成功回调的,若是拒绝授权,那么第二次进来,会手动引导你去系统授权设置里

onLoad(() => {
		pullAuth(scope.userLocation, firstSuccess, firstFail)
	})

const firstSuccess = () => {
		uni.showLoading({
			title: 加载中
		})
		uni.getLocation({
			type: wgs84,
			success: function (res) {
				// res.longitude
				// res.latitude
			},
			fail: function () {
				uni.hideLoading()
				uni.showToast({
					title: 获取地址失败,将导致部分功能不可用,
					icon:none
				});
			}
		});
	}
const firstFail = () => {	
	}

2.2、摄像头调用

我们一般都会单独写一个相机页面,要是你没有啥想法写这个页面,那么参考我的之前博客,链接为

我在这里是 当点击拍照时候,再开始进行授权判断,为什么呢? 因为camera组件的使用,会让在onLoad时候授权框弹出两次,这个就很奇怪,很明显,第一次弹出是因为camera初始化就必须要进行授权,第二次弹出是我们在onLoad周期要申请这个权限,所以我认为的解决方式就是不将pullAuth授权放在onLoad中,因为camera组件初始化必须要弹出授权框,所以即使我们在第一次弹出授权拒绝时,也可以在点击拍照时,在进行手动引导授权

经验分享 程序员 微信小程序 职场和发展