微信小程序用户授权踩坑

2,022 阅读2分钟

最近接触小程序的开发特别多,因为我们的小程序要获取用户的业务中必须要获取小程序用户的地理位置,首先我们来谈谈如何来获取用户的位置信息;

  1. 微信小程序规定了获取用户的信息必须要经过用户的同意,不能直接获取

当然在这个信息裸奔的时代,微信小程序这点做的可以说是相当"仗义"了,那么参考微信小程序的文档,正常的步骤是什么呢?

调起微信授权的接口

首先要在app.json中配置perssion;

 "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示" // 高速公路行驶持续后台定位
    }
}

配置完成后在要使用的位置获取用户的位置:使用 wx.getLocation(Object object) 他的成功回调里面包含

然后可以获取用户的经纬度传给后台,接下来就可以愉快的继续开发了。然而,你以为这样就结束了吗?

接下来各种各样用户的骚操作,让你防不胜防,比如:

  1. 用户关闭了微信的允许位置访问;
  2. 在微信授权的时候用户拒绝了访问自己的位置信息;
  3. 。。。。。各种骚操作,我就不解释了,快上车;

我们都知道用户拒绝授权后,微信小程序会在本地记录用户的信息,除非用户删掉小程序或者过端时间在来访问小程序

针对上面的两种问题,他们都会进入到wx.getLocation(Object object)的fail()回调函数中, 然而如何去区别两种情况呢,我们去判断 res.authSetting['scope.userLocation]是不是为true, 如果为true则表示用户关闭了微信允许访问位置, 否则是拒绝了授权;

话不多说一顿骚操做贴代码:

wx.getLocation({
success (res) {
  const latitude = res.latitude
  const longitude = res.longitude
},
fail (res){
   <!---在这里兼容各种骚操作--->
    wx.getSetting({
     success(res) {
       if (!res.authSetting['scope.userInfo']) {
           wx.showModal({
             title: 'XX将获取您的位置信息',
             content: '请在手机设置中打开定位,若您拒绝,将影响小程序的使用',
             success (res) {
               if (res.confirm) {
                 wx.openSetting({
                     success (res) {
                       console.log(res.authSetting)
                       // res.authSetting = {
                       //   "scope.userInfo": true,
                       //   "scope.userLocation": true
                       // }
                     }
                   })
               } else if (res.cancel) {
                 console.log('用户点击取消')
               }
             }
           })
       }
       else{
        wx.showModal({
         title: '手机定位未开启',
         content: '请在手机设置中打开定位,我们需要知道您的位置才能提供更好的服务',
         showCancel: false,
         success (res) {
           console.log(res)
         }
       })
       }
     }
   })
}
})

写在最后

wx.getSetting是去查看用户的授权信息

wx.openSetting引导用户跳转到授权页面,用户手动打开权限访问;