小程序 wx.authorize 之 scope.userLocation 授权错误

今天做的一个小程序项目中需要用到scope.userLocation获取用户地理位置这个权限,这个权限对应两个接口wx.getLocation(Object object)wx.chooseLocation(Object object),这两个接口都能够获取到用户当前位置的经纬度,但是除此之外,wx.getLocation(Object object)还能获都速度、高度、经纬度的精确度等更多专业的地理信息;wx.chooseLocation(Object object)则更加通俗化一些,通过这个接口,我们可以获得具体的地理名称,比如某某街道xx号这样的,看到网上有很多关于获取地理名称的教程是先通过wx.getLocation(Object object)获取经纬度,再由第三方 API 解析成地理名称,这样未免太麻烦了,可能是不知道wx.chooseLocation(Object object)的存在。

我的思路是直接调用wx.chooseLocation(Object object),如果成功,则在它的回调函数success中直接获取地理名称,如果失败,则是由于还没有授权造成的,我们就在回调函数fail中获得授权然后再调用wx.chooseLocation(Object object)即可,一旦同意授权,除非你删除这个小程序,否则授权的有效性是一直存在的,下次直接调用wx.chooseLocation(Object object)就能成功回调。这部分代码如下:

wx.chooseLocation({
    success: function(res) {
      console.log('succes1')
      console.log(res)
      that.setData({
        addr: res.address //调用成功直接设置地址
      })
    },
    fail: function() {
      wx.getSetting({
        success(res) {
          if (!res.authSetting['scope.userLocation']) {
            console.log("f1")
            wx.authorize({
              scope: 'scope.userLocation',
              success() {
                wx.chooseLocation({
                  success: function(res) {
                    that.setData({
                      addr: res.address //调用成功直接设置地址
                    })
                  },
                })
                console.log('success2')
              },
              fail(){
                console.log("f2")
              }
            })
          }
        }
      })
    }
  })

但是,问题来了,这部分代码在电脑开发工具上一直可以按照预期结果运行,可是一旦放到手机上,就千奇百怪,大概一百次只有一次是按照预期结果运行的,其他的全部没有成功调出地图获取用户当前位置(我也好奇为什么会有一次成功???)。我查阅了官方文档,才发现,原来scope.userLocation这个权限比较特别,必须要在app.json文件中声明这个权限是用来干吗的。如下:

"permission": {
  "scope.userLocation": {
    "desc": "需要记录打卡时的位置信息"
  }
},

注意看下图中的描述就是代码中的 desc:description



加了之后,症状就解除了。

欢迎留言,欢迎关注微信公众号: 月小水长

本文标题:小程序 wx.authorize 之 scope.userLocation 授权错误

文章作者:月小水长

发布时间:2019年04月14日 - 16:04

最后更新:2019年04月14日 - 17:04

原始链接:https://inspurer.github.io/2019/04/14/小程序-wx-authorize-之-scope-userLocation-授权错误/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

您的赞助将鼓励我继续创作!
-------------本文结束感谢阅读-------------