现在给大家分享一下我自己开发微信小程序“+”时针对“授权失败”场景的一个我认为比较优雅的解决方案,如果大家有兴趣可以通过下面的小程序代码来体验一下它的用户授权流程。
“+”小程序有一个阅读记录页,用于记录当前用户浏览的文章历史记录,以下是解决方案的细节:
1)我把读书记录页放在了第三个TAB,用户第一次进入加载首页时,并没有申请授权的相关代码。
2)当用户首次点击阅读历史页面时,如下图所示,除了弹出常规的用户授权对话框外,还可以看到“阅读历史仅保存在设备上……”的文字,消除了部分不愿数据被远程保留的用户的心理负担。
3)用户点击同意授权就好了,但是如果用户拒绝授权,则会弹出提示,详细说明授权的必要性(如下图):
4)用户只有一个选择,点击“确定”,之后会跳转到用户信息设置页面,需要手动勾选(如下图)。如果此时用户仍然拒绝,那么每次切换到阅读历史页面,都会弹出如上图所示的对话框。
执行
微信小程序在基础库1.2版本中提供了wx.接口用于获取用户当前的设置,利用该接口我们可以对用户的授权状态进行二次判断,如果回调失败,可以弹框并通过wx.接口进入设置页面。
以下是“+”的实现代码:
1)首先在util.js中添加一个判断是否为空对象的函数,后面wx.中可以使用这个函数判断用户是否是首次授权。
| // // 它是一个空对象 (e) {var t;for (t in e) !1; !0} |
|:----|
2)在需要授权的页面生命周期中添加获取用户信息的常规代码(此代码与官方一致,不再全文重复)。
| // var that = this; //调用应用实例的方法获取全局数据 this.( () {//更新用户数据 that.({: })}); |
|:----|
3)还创建一个新功能来检测用户授权状态。
| // // 检测授权状态:(cb) {var that = this;// 判断是否是首次授权,若非首次授权,授权失败,则提醒 wx.({: (res) {.log(res.);var = res.;if (util.()) {.log('首次授权');} else {.log('非首次授权', );// 没有授权的提醒if ('.' === ) {wx.({: '用户没有被授权',: '要正常使用读书记录功能,请按OK键在授权管理中选择“用户信息”,然后点击OK,最后重新进入小程序即可正常使用',: ,: (res) {if (res.) {.log('用户点击OK')wx.({: (res) {.log(' ', res.);}});}}})}}});} |
|:----|
PS:如果你觉得这段代码里的层层回调有点恶心,可以自行引入,重写代码。
4)函数与生命周期进行绑定,这样在“授权失败”场景下,进入页面时会有提醒。
| // : (){这个.();} |
|:----|
文章结束
以上就是 Jeff 的解决方案,本文只是一个起点,如果你觉得有更好的,不妨告诉我~