18910140161

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

顺晟科技

2021-06-16 10:48:20

684

在今天完成的一个小程序项目中,有必要使用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中直接得到地名。如果失败,是因为没有授权。我们可以在回调函数中获得授权失败,然后调用wx.chooseLocation(Object object)。一旦同意授权,除非删除这个小程序,否则授权的有效性始终存在,下次直接调用wx.chooseLocation(Object object)就可以成功回调。这部分代码如下:

wx.chooseLocation({

成功:功能(res) {

console . log(' success 1 ')

console.log(res)

that.setData({

Addr: res.address //成功调用以直接设置地址

})

},

fail: function() {

wx.getSetting({

成功(res) {

if(!RES . AuthSetting[' scope . UserLocation ']){

console.log('f1 ')

wx.authorize({

scope: 'scope.userLocation ',

成功(){

wx.chooseLocation({

成功:功能(res) {

that.setData({

Addr: res.address //成功调用以直接设置地址

})

},

})

console.log('success2 ')

},

fail(){

console.log('f2 ')

}

})

}

}

})

}

})

但是问题是这部分代码在电脑开发工具上总是可以按照预期的结果运行,但是一旦放到手机上就很奇怪了。大概一百次,只按预期结果运行,其他的都没能调出地图得到用户的当前位置(我也想知道为什么会有成功?)。我查了一下官方文档,才发现原来的scope.userLocation权限挺特殊的,需要在app.json文件中声明这个权限是用来做什么的。如下:

权限' : {

scope.userLocation': {

Desc': '打卡时需要记录位置信息'

}

},

请注意下图中的描述是代码中的描述:

添加后症状缓解。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航