小程序没有受权时的处理方法

在作小程序开发的时候,咱们常常会须要获取用户的一些权限。好比获取用户信息用于直接登陆,获取地理位置用于定位等。但要是用户拒绝受权了,该怎么处理呢?javascript

问题分析

在小程序里面,获取到用户权限是进行某些操做的必要前提。好比在进入小程序的时候,获取到用户信息,拿到 unionId 对应到本身平台的帐号进行登陆,免去用户本身输入帐号密码,这就是一个不错的体验。java

当咱们调用 wx.getUserInfo 或者 wx.getLocation 这种须要用户受权的 API 时,小程序会弹框让用户选择受权:小程序

当用户选择容许后,下次再进入小程序就不会再询问了,直接得到用户受权(除非将小程序删了再进入)。这里的问题在于,当用户点了拒绝以后,就拿不到相关受权了,而且在一段时间内,进入小程序都不会再出现这个弹框。微信

从用户体验及保护隐私的角度考虑,小程序最好是不用受权也可使用(或者体验)。但有些类型的小程序确实是须要拿到用户信息才能使用的。这里提供一个简单的解决方案。this

解决方案

以获取用户信息直接登陆为例。增长一个受权页面,做为进入小程序的第一个页面,在这里获取用户数据和登陆。默承认以什么都不显示,也能够当作引导页来使用。spa

获取用户信息须要用到 wx.login 和 wx.getUserInfo 两个 API,关于这两个 API 的具体信息你们能够到官方文档去查看。code

增长一个登录方法,代码以下:cdn

//登陆
login: function () {
  var that = this
  if (typeof success == "function") {
    this.data.getUserInfoSuccess = success
  }
  wx.login({
    success: function (res) {
      var code = res.code;
      wx.getUserInfo({
        success: function (res) {
          //平台登陆
        },
        fail: function (res) {
          that.setData({
            getUserInfoFail: true
          })
        }
      })
    }
  })
}复制代码

当上面代码走到了 fail 里面,就能够认为在获取受权的时候,用户点了拒绝。当 getUserInfoFail 为 true 的时候,能够展现一个获取受权的按钮,好比像这样:blog

接下来介绍另外一个 API : wx.openSetting,使用 wx.openSetting 能够跳转到小程序的受权设置界面,在安卓里面它长这样:ip

在点击受权按钮后跳转到这里,让用户受权了才给进入首页,不然就停留在受权页面。

但还有个小问题,这个 API 是基础库 1.1.0 才有的,因此须要作兼容处理:

因此,最终跳转受权的代码以下:

//跳转设置页面受权
openSetting: function () {
  var that = this
  if (wx.openSetting) {
    wx.openSetting({
      success: function (res) {
        //尝试再次登陆
        that.login()
      }
    })
  } else {
    wx.showModal({
      title: '受权提示',
      content: '小程序须要您的微信受权才能使用哦~ 错过受权页面的处理方法:删除小程序->从新搜索进入->点击受权按钮'
    })
  }
}复制代码

还好 1.1.0 已结算是比较早的版本了,如今都出到 1.3.0 了。

最终效果以下:

一样的处理方式也能够用在获取别的权限上,妥妥的。

相关文章
相关标签/搜索