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组件初始化必须要弹出授权框,所以即使我们在第一次弹出授权拒绝时,也可以在点击拍照时,在进行手动引导授权