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

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

浏览量:2593 时间: 来源:月小水长

今天做的一个小程序项目中需要用到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

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

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎