【微信小程序】获取用户地理位置权限,二次请求受权,逆解析获取地址

摘要:微信小程序内获取用户地理位置信息受权,被拒绝后二次获取,获取权限后逆解析获得用户所在省市区等..html

场景:商城类小程序,在首页时需展现附近门店,即用户刚进入小程序时就须要获取到用户位置信息git

step1json

在小程序中若要获取用户地理位置信息,需获得用户明确受权,且声明用途,因此首先在app.json中配置声明小程序

参见(https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html微信小程序

"permission": { "scope.userLocation": { "desc": "你的位置信息将用于获取附近门店" } }

 

step2api

声明以后便可调用   wx.authorize  向用户申请受权,用户赞成以后 调用    wx.getLocation   获得经纬度并作下一步处理微信

 

参见(https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.htmlapp

//能够经过 wx.getSetting 先查询一下用户是否受权了 "scope.userLocation" 这个 scope,也可直接调用wx.authorize请求受权; wx.getSetting({ success(res) {// 查看全部权限 let status = res.authSetting['scope.userLocation']// 查看位置权限的状态,此处为初次请求,因此值为undefined if (!status) {// 若是是首次受权(undefined)或者以前拒绝受权(false) wx.authorize({ // 发起请求用户受权 scope: 'scope.userLocation', success() {// 用户容许了受权 wx.getLocation({ // 请求位置信息 type: 'gcj02', success (res) { console.log(res, 95);// 获得位置信息(经纬度,速度等等),====>>>>>请求附近门店 } }) } }) } } })

step3url

兼容用户拒绝受权的场景:若用户可能会点击不容许,咱们是拿不到位置信息的,并且咱们再次调用  wx.authorize  请求位置受权,上面的弹框是不会再次出现的,除非用户删除小程序后再次进入 ,那若是咱们还须要再次向用户申请受权呢?spa

当当当当~

这时咱们就须要用到wx.openSetting了,这个api能够直接跳转打开设置页面,引导用户受权

具体代码以下:

wx.openSetting({ success (data) { if (data.authSetting["scope.userLocation"] == true) { wx.showToast({ title: '受权成功', icon: 'success', duration: 2000, success () {} }) } } })

 

 用户受权以后,咱们就能够再次 使用 wx.getLocation 来获取位置信息了

step4

经过经纬度,逆解析获取用户城市

这里使用的是百度地图的api,使用方法很是简单,调用接口,传入经纬度,就能够获得省市区,甚至街道啦(可是街道不怎么准,省市区通常也够用了)

// 百度地图的密钥请自行注册。。。
wx.request({ url:
'http://api.map.baidu.com/geocoder/v2/?ak=你的密钥&location=' + latitude + ',' + longitude + '&output=json', data: {}, header: { 'Content-Type': 'application/json' }, success: function (ops) { wx.setStorageSync('province', ops.data.result.addressComponent.province)//把位置信息存起来 wx.setStorageSync('city', ops.data.result.addressComponent.city)// 把位置信息存起来 }, fail: function (resq) { wx.showModal({ title: '信息提示', content: '请求失败', showCancel: false, confirmColor: '#f37938' }); }, complete: function () {} })

 

今天的课就上到这里了,各位同窗再见!

留个微信,欢迎交流

相关文章
相关标签/搜索