微信小程序中提供了相关API 让开发者能获取到微信用户的相关信息,在首次去获取的时候会展示一个用户是否同意授权的对话框。发现有不少线上的小程序都没有处理好用户“拒绝授权”导致的“授权失败”场景。

一个观点

私认为,开发微信小程序在用户授权上有一个要点:除非非常有必要,不要一进入小程序就申请授权,而是仅需要授权的页面才申请——这样让用户的心理负担没那么大。站在用户的角度,有时候我是很讨厌这种一进入小程序就申请授权的行为,毕竟头像昵称这些本质上还是属于用户的隐私,你小程序不给个理由就要拿去,我还是很反感的。同时,也应该做好因用户拒绝授权导致的“授权失败”场景的优雅处理。

分享解决方案

用户点击同意授权固然好,但如果是拒绝授权,会弹出一个提示予以详细说明授权的必要性(如下图):

用户只有点击“确定”的选择,点击后会跳转到用户信息设置页面,需要手动勾选(如下图)。如果此时用户依然拒绝,后续只要切换到阅读记录页面,均会一直弹上图的对话框。

具体实现

微信小程序在基础库1.2 版本中提供了wx.getSetting 这个接口可以获取到用户的当前设置。利用这个接口我们就可以进行二次判断用户的授权状态,如果回调失败,则可以弹对话框说明并通过wx.openSetting 这个接口进入到设置页面。

1)首先在util.js 中加入一段用来判断是否为空对象的函数。这个函数在后面wx.getSetting 中可以用来判断用户是否是第一次授权。

// 是否为空对象
function isEmptyObject(e) {var t;for (t in e)return !1;return !0
}

2)在需要授权的页面的onload 生命周期中添加常规的获取用户信息代码(此代码与官方的quickstart 一致,不全部重复)。

var that = this;//调用应用实例的方法获取全局数据this.getUserInfo(function (userInfo) {//更新用户数据that.setData({userInfo: userInfo})});

3)另外新建一个checkSettingStatu 函数来检测用户授权状态。

// 检测授权状态
checkSettingStatu: function(cb) {var that = this;// 判断是否是第一次授权,非第一次授权且授权失败则进行提醒wx.getSetting({success: function success(res) {console.log(res.authSetting);var authSetting = res.authSetting;if (util.isEmptyObject(authSetting)) {console.log('首次授权');} else {console.log('不是第一次授权', authSetting);// 没有授权的提醒if (authSetting['scope.userInfo'] === false) {wx.showModal({title: '用户未授权',content: '如需正常使用阅读记录功能,请按确定并在授权管理中选中“用户信息”,然后点按确定。最后再重新进入小程序即可正常使用。',showCancel: false,success: function (res) {if (res.confirm) {console.log('用户点击确定')wx.openSetting({success: function success(res) {console.log('openSetting success', res.authSetting);}});}}})}}}});}

PS: 如果你觉得这段代码层层回调有点恶心,可自行引入Promise 来改写代码。

4)checkSettingStatu 函数绑定到onShow 生命周期,这样在“授权失败”场景下一进入页面就提醒。

onShow: function(){this.checkSettingStatu();}

原创地址:
© 转载请注明来源:https://devework.com/weixin-weapp-auth-failed.html

微信小程序-“授权失败”场景的优雅处理相关推荐

  1. 微信小程序授权登录第一次总是失败,第二次登录便正常了

    微信小程序授权登录第一次总是失败,第二次登录便正常了 错误流程 调用 用户点击授权用户信息按钮 ===> 调用wx.login( )生成code发送给后台生成session_key解密 ===& ...

  2. 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  3. uniapp微信小程序授权登录和获取微信绑定的手机号码

    uniapp微信小程序授权登录和获取微信绑定的手机号码 弹出授权的弹框 <view class="weixinOk" @tap="getUserProfile&qu ...

  4. 微信小程序授权登录取消授权重新授权处理方法 附可用代码

    微信小程序授权登录基本是小程序的标配了,但是官方的demo,取消授权后,就不能再重新点击登录,除非重新加载小程序才可以,这下怎么办? 我们可以先在首页引导用户点击,然后跳转到一个新的页面,在新的页面进 ...

  5. 微信支付踩坑合集:微信小程序支付失败是什么原因?

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  6. 微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  7. 新版微信小程序授权登录流程及问题汇总(getUserProfile)

    问题来源:前不久去面试的时候有面试官问我你有自己的博客啥的吗?只能很尴尬的说没有.其实一直想有一个属于自己的博客啥的去记录自己在开发过程中遇到的问题,正好现在微信小程序比较流行,就花了两天自己搞了一个 ...

  8. SpringCloud 微信小程序授权登录 获取openId SessionKey【SpringCloud系列13】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 自我提升方法推荐:神奇的早起 早上 5:00 -5:20 起床刷牙 5:30-6:00 晨练(跑步.跳绳.骑自行车.打球等等) ...

  9. PHP快速实现微信小程序授权

    小程序开发讲究的就是一个敏捷软件开发模式,作为微信小程序授权也有多个项目的积累,所以想贴出来代码,让需要用到的朋友拿来即用(当然前提是需要修改自己的小程序appid和秘钥). 前端调用wx.login ...

  10. 微信小程序授权登录页面(有提示窗)

    微信小程序授权登录(有弹窗提示) 1 效果显示 1.1 授权登录页面 1.2 授权登录提示弹窗 1.3 拒绝授权登录 1.4 允许登录后,跳转到小程序首页 2 代码 2.1 wxml 文件 <v ...

最新文章

  1. java 顶层类_Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
  2. 【Python小程序】这竟是2月14号情人节表白神器、成功率100%?(进来康康)
  3. Paul Rayner认为DDD和敏捷可以共存
  4. (诊断)处理错误fatal error: Python.h: No such file or directory
  5. 同步IO、异步IO、阻塞IO、非阻塞IO、复用IO
  6. Linux中的 硬链接ln和软连接ln -s
  7. tcmalloc内存分配器分析笔记:基于gperftools-2.4
  8. 如何更好地优化大数据分析
  9. 适用于stuido one的虚拟贝斯手插件:UJAM Virtual Bassist ROYAL for Mac
  10. Visual Studio 2008 可扩展性开发(八):关于用户界面的种种(上)
  11. Oracle操作(转)
  12. 面试题之TCP三次握手和四次挥手详解
  13. 小米笔记本显示器关闭后无法唤醒曲线解决办法
  14. lcx的使用-内网穿透
  15. 在树莓派3上使用红外遥控器控制libreELEC和Raspbian系统
  16. 高精度定位赋能行业创新,Petal Maps Platform 创新地图平台能力
  17. 怎么将路由器设置成交换机
  18. 基于AM5728核心板的户外工作站可靠性和便捷性设计
  19. STM32F4+FreeRTOS+FreeRTosTcpIp移植教程
  20. iOS常见错误8-Missing iOS Distribution signing identity for “XXXXX”. Xcode can request one for you.

热门文章

  1. html语言制作留言条,html怎么操作来实现留言板样式?(代码示例)
  2. 如何以静默方式将.REG文件添加到注册表
  3. QT 操作 QLabel
  4. 高通CSR8670蓝牙音频芯片怎么样?CSR8670处理器参数介绍
  5. 一、Geos库的安装和计算多边形是否相交
  6. 【一文读懂】Contours Hierarchy ——opencv边界的继承结构,表格的提取,表格孔洞处理,空心形状结构的提取
  7. vue 3 引入百度地图api
  8. java连连看怎么加音效_怎么给视频加音效
  9. Python | MD5爆破及Base64/Base32爆破解密脚本
  10. aven class javax.xml.parsers.SecuritySupport12 cannot access its superclass javax.xml.parsers.Secur