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

1、授权方式

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

有趣的现象:

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

/*** 授权综合逻辑* @param {*} scope 权限代表* @param {*} successCallback 成功回调* @param {*} failCallback 失败回调*/
export function pullAuth(scope, successCallback, failCallback) {const map = new Map([['scope.userInfo', '用户信息'],['scope.userLocation', '地理位置'],['scope.userLocationBackground', '后台定位'],['scope.address', '通信地址'],['scope.record', '录音功能'],['scope.writePhotosAlbum', '保存到相册'],['scope.camera', '摄像头'],['scope.invoice', '获取发票'],['scope.invoiceTitle', '发票抬头'],['scope.werun', '微信运动步数'],])uni.getSetting({success(res) {if (!res.authSetting[scope]) {uni.authorize({scope,success(){ // 允许授权successCallback()},fail(){    // 拒绝授权if (map.has(scope)) {let word = map.get(scope)uni.showModal({content:`检测到您没打开${word}权限,是否去设置打开?`,confirmText: "确认",cancelText:'取消',success: (res) => {if(res.confirm){uni.openSetting({success: (res) => {successCallback()},fail: () => {failCallback()},})}else{failCallback()}}})                } else {uni.showToast({title: '无此授权功能'})failCallback()}}})} else {successCallback()}}})}

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、摄像头调用

我们一般都会单独写一个相机页面,要是你没有啥想法写这个页面,那么参考我的之前博客,链接为 uniapp + vue3微信小程序开发(2)活体人脸识别

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

// 详细代码请参考我上面发的链接​ uniapp + vue3微信小程序开发(2)活体人脸识别const startFace = () => {pullAuth('scope.camera', firstSuccess, firstFail)}const firstSuccess = () => {uni.showLoading({title: '初始化...'})photoStatus()if (!ctx.value) {ctx.value = uni.createCameraContext();}setTimeout(() => {uni.hideLoading()takePhoto()}, 500)}const firstFail = () => {photoStatus(-1)}

uniapp + vue3微信小程序开发(5)授权相关推荐

  1. uniapp + vue3微信小程序开发(1)框架搭建

    uniapp内置vue2,很多小伙伴喜欢用,但是作为首批吃螃蟹的人,肯定会想用vue3来开发,那么会遇到哪些问题呢? 1.编辑器等工具 Hbuilder X 3.4.6版本及以上(编辑器也在不断更新, ...

  2. uniapp + vue3微信小程序开发(4)身份信息认证

    微信是无法获取用户的身份证信息,那么我们可以自己通过上传或者拍摄身份证,然后结合ocr进行识别,那么最后为了保证准确性,再通过人脸识别来比对,辨别是不是本人,关于人脸识别,在我这篇博客里介绍了 uni ...

  3. uniapp + vue3微信小程序开发(3)微信授权登录

    整体思路: 接口获取openId => 用户微信信息入库 => 手机号授权入库 逻辑详解: 我们知道小程序都是需要openId的,那我们可以通过前端获取,也可以通过后端接口获取, 前端就是 ...

  4. 微信小程序开发02 授权模型: 小程序的用户体系与 OAuth 规范

    你好,我是俊鹏,今天我想跟你聊一下微信小程序的授权模型. 登录认证是一个完整应用必备的模块,除非你的应用程序不需要任何与用户相关的功能(比如hao123 这种静态导航网站一般不会涉及用户体系).很多人 ...

  5. 微信小程序开发 - 用户授权登陆

    本篇将帮助读者实现基于 微信开发者工具 & C#环境 下的用户在小程序上的授权登陆. 准备: 微信开发者工具下载地址:https://developers.weixin.qq.com/mini ...

  6. 微信小程序云开发用户身份登录_微信小程序开发用户授权登录(下)

    如果开发者拥有多个移动应用.网站应用.和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用.网站应用和公众帐号(包括小程序),用户的 Un ...

  7. uniapp之微信小程序开发——根据主题色动态修改svg的颜色

    文章目录 小程序引用图片的几种方式 小程序如何引用svg图片? 小程序根据主题色,动态修改svg颜色 总结及注意点 小程序引用图片的几种方式 这一期我们直入主题,教大家如何动态改变图标的颜色. 首先, ...

  8. uniapp手写_【转】uni-app框架纯手写微信小程序开发左侧滑动菜单

    本帖最后由 fengrui99 于 2020-7-22 14:38 编辑 原文来自:在学习的uni-app的微信小程序开发路上慢慢开始不一直依赖插件(但是使用插件是真的香,一直用一直香) 在大佬的指引 ...

  9. uniapp手写_uni-app框架纯手写微信小程序开发左侧滑动菜单

    原来到最后才发现有些东西,没有就真的没有.不行,就真的不行 唠叨一会 在学习的uni-app的微信小程序开发路上慢慢开始不一直依赖插件(但是使用插件是真的香,一直用一直香),在大佬的指引下学会自己去写 ...

最新文章

  1. 微型计算机中数据总线既可以传输数据信息,计算机考试题库精简版
  2. jpa的批量修改_SpringDataJpa的批量 保存 修改 操作
  3. 虚拟打印机开发日志(一):使用x64 WIN7编译环境编译的完整步骤
  4. 如何使用Swift Playgrounds制作东西
  5. 关键字typedef、关键字using、auto类型说明符和declytpe类型指示符
  6. leetcode - 673. 最长递增子序列的个数
  7. python解析库详解_PyQuery库详解
  8. 首篇NLP图神经网络综述!127页文档让你全面了解这个领域
  9. 【离散数学】集合论 第四章 函数与集合(6) 三歧性定理、两集合基数判等定理(基数的比较)、Cantor定理
  10. 【超详细】韦东山:史上最全嵌入式Linux学习路线图
  11. PCI Express Base Specification Revision 3.0 英文手册 免费下载
  12. 人人都是产品经理02-08章摘要
  13. 轻轻的,我来了!希望各大神关注~
  14. 如何用pycharm将.ui文件转换为.py文件(内含出错解决方法)
  15. Python学习之路:函数传递可变参数与不可变参数
  16. SQL39 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,使用强制索引。
  17. HCIE 面试资料-IPv6
  18. Redis三主三从集群搭建(三台机器)
  19. 传奇3的WIL文件格式
  20. 数据结构与算法——算法基础

热门文章

  1. 【职场和发展】让我们在职场上更加自信
  2. mysql sql 去除重复行_SQL查询语句去除重复行
  3. 慕尼黑(上海)电子展-先进技术拾英
  4. 聚焦2020九大科技热点,本周三ELEXCON电子展大幕将启!(含展商名单+会议推荐)...
  5. 西安三本哪个计算机学校最好,西安三本大学前十名, 西北大学现代学院仅第四...
  6. 10分钟 GET 新技能 - CSS选择器
  7. 浏览器发出http请求访问服务器的流程(B/S模式)
  8. Licode入门学习:WebRtcConnection源码分析(三)
  9. realsense系列相机ros内外参标定2022.11.20
  10. 将一个字节显示为两个十六进制数字