【微信小程序】再次授权地理位置getLocation+openSetting使用

摘要:
我们知道:1、微信的getLocation接口,是获取用户当前地理位置的,返回经纬度、速度等信息;2、它的默认工作机制:首次进入页面,调用该api,返回用户授权结果,并保持该结果。我们这里考虑的是拒绝授权,再调用wx.openSetting接口,请求再次授权,返回授权结果处理数据和业务。

写在前面:在tarbar主页面,再次授权JS代码请放在onshow里面;在详情页(非一级主页面),再次授权JS代码请放在onReady里面,具体原因我前面博客讲了的。

我们知道:
1、微信的getLocation接口,是获取用户当前地理位置的,返回经纬度、速度等信息;
2、它的默认工作机制:
首次进入页面,调用该api,返回用户授权结果,并保持该结果。
只要用户未删除该小程序或变更授权情况,那么用户再次进入该页面,
授权结果还是不变,且不会再次调用该API;
3、那么问题来了:如何不要求用户删除小程序情况下,再次发起授权请求呢?
KEY:wx.openSetting

1、效果图:首次进入某页面

【微信小程序】再次授权地理位置getLocation+openSetting使用第1张

拒绝授权后,再次进入该页面或者点击页面某按钮(获取位置)绑定JS

【微信小程序】再次授权地理位置getLocation+openSetting使用第2张

2、不知道有没有细心的道友,发现上面2个弹出框的结构是一样的,前者使用的是wx.getLocation接口自带的样式,后者使用的wx.showModel接口带的样式

3、废话不多说,简单讲一下原理:首次进入该页面,onload或者onshow调用wx.getLocation要求用户进行授权;用户拒绝后,再次进入该页面,我们通过wx.getSetting接口,返回用户授权的情况:

JS打印:=>【微信小程序】再次授权地理位置getLocation+openSetting使用第3张 ||| console控制台输出:=>【微信小程序】再次授权地理位置getLocation+openSetting使用第4张

然后,根据上面JS中,res.authSetting['scope.userLocation']的值与true比较,为true就是授权了,false就是拒绝授权了。

我们这里考虑的是拒绝授权,再调用wx.openSetting接口,请求再次授权,返回授权结果处理数据和业务。over,就是这么EASY!

4、我这里只打印出了userInfo和userLocation的接口返回信息,当然你还可以打印其他的信息,只要你之前调用过这些微信API,详见微信的scope表:https://mp.weixin.qq.com/debug/wxadoc/dev/api/authorize-index.html

【微信小程序】再次授权地理位置getLocation+openSetting使用第5张

5、详情代码:

//地图功能单独拿出来 -xzz1023
var village_LBS = function(that){
  //var that = this;
  //------------ 腾讯LBS地图  --------------------
wx.getLocation({
    type: 'gcj02', //返回可以用于wx.openLocation的经纬度
    success: function(res) {
      //调用接口, 坐标转具体位置 -xxz0717
demo.reverseGeocoder({
        location: {
          latitude: Number(res.latitude),
          longitude: Number(res.longitude)
        },
        success: function(res) {
          console.log(res);
          that.setData({
            start_address: res.result.address,   //起点地址
            city: res.result.address_component.city,  //起点城市
            district: res.result.address_component.district   //
})
        }
      });
  })
)
Page({
    onLoad: function(options) {
       var that = this;
       village_LBS(that);
   }
     onReady: function() {
         var that = this;
    wx.getSetting({
      success: (res) =>{
        console.log(res);
        console.log(res.authSetting['scope.userLocation']);
        if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {//非初始化进入该页面,且未授权
wx.showModal({
            title: '是否授权当前位置',
            content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用',
            success: function(res) {
              if(res.cancel) {
                console.info("1授权失败返回数据");
              } else if(res.confirm) {
                //village_LBS(that);
wx.openSetting({
                  success: function(data) {
                    console.log(data);
                    if (data.authSetting["scope.userLocation"] == true) {
                      wx.showToast({
                        title: '授权成功',
                        icon: 'success',
                        duration: 5000
                      })
                      //再次授权,调用getLocationt的API
village_LBS(that);
                    }else{
                      wx.showToast({
                        title: '授权失败',
                        icon: 'success',
                        duration: 5000
                      })
                    }
                  }
                })
              }
            }
          })
        } else if (res.authSetting['scope.userLocation'] == undefined) {//初始化进入
village_LBS(that);
        }
      }
    })
     } 
})

免责声明:文章转载自《【微信小程序】再次授权地理位置getLocation+openSetting使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【STM32H7教程】第13章 STM32H7启动过程详解中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-RRPC通讯)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信小程序支付源码,后台服务端代码

作者:尹华南,来自原文地址 微信小程序支付绕坑指南 步骤 A:小程序向服务端发送商品详情、金额、openid B:服务端向微信统一下单 C:服务器收到返回信息二次签名发回给小程序 D:小程序发起支付 E:服务端收到回调 首先准备以一下信息 小程序发送小程序向服务端发送商品详情、金额、openid 服务端接收小程序发来的信息...

微信小程序页面引入公用头部底部

最近比较浮躁各种事情各种烦恼,现在开始静下心来写博客。学技术就不能浮躁时时刻刻要记在心里,激励自己希望也可以激励大家。最近一段时间在开发小程序,没有系统的学习过拿起来就做的那种写的不好各位多多指教。 第一步:新建一个目录 在pages目录下面新建一个templates目录(小窍门:在app.json 文件pages里面写上"pages/templates/...

小程序获取用户登录及手机号登录

小程序登录除了常见的短信登录、密码登录,还一个最重要的就是微信授权登录了(毕竟是基于微信的,要给人家面子吗:0,手动滑稽),写这篇随笔的原因还是好久没更了,今天先随便放一个压压档。话不多说,直奔主题。 小程序的微信授权登录中,可以直接写入微信定义好的button组件掉起微信授权功能。 需要注意的就是定义open-type了,其对应的可选属性还有很多种,具体...

微信小程序插件开发

小程序插件功能介绍 插件,是可被添加到小程序内直接使用的功能组件。开发者可以像开发小程序一样开发一个插件,供其他小程序使用。同时,小程序开发者可直接在小程序内使用插件,无需重复开发,为用户提供更丰富的服务。 开发插件 开放范围及服务类目 开放范围:企业、媒体、政府及其他组织主体的小程序 开发者可选择当前小程序帐号已选类目中的一个,作为插件的服务类目。以下为...

微信小程序----返回上一页刷新或当前页刷新

声明 bug: 在onShow中执行this.onLoad(),会导致页面第一次加载的时候数组加载两次! 造成原因:页面加载先执行onLoad,再执行的onShow,就会出现在onLoad加载一次数据,在onShow中执行this.onLoad()在加载一次数据。 解决办法:将不需要刷新的数据放在onLoad中执行,将需要刷新的数据放在onShow中执行!...

微信小程序-返回并更新上一页面的数据

小程序开发过程中经常有这种需求,需要把当前页面数据传递给上一个页面,但是wx.navigateBack()无法传递数据。 一般的办法是把当前页面数据放入本地缓存,上一个页面再从缓存中取出。 除此之外还有一种办法,巧妙利用页面栈。 getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前...