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

寫在前面:在tarbar主頁面,再次受權JS代碼請放在onshow裏面;在詳情頁(非一級主頁面),再次受權JS代碼請放在onReady裏面,具體緣由我前面博客講了的。html

咱們知道:
一、微信的getLocation接口,是獲取用戶當前地理位置的,返回經緯度、速度等信息;
二、它的默認工做機制:
首次進入頁面,調用該api,返回用戶受權結果,並保持該結果。
只要用戶未刪除該小程序或變動受權狀況,那麼用戶再次進入該頁面,
受權結果仍是不變,且不會再次調用該API;
三、那麼問題來了:如何不要求用戶刪除小程序狀況下,再次發起受權請求呢? KEY:wx.openSetting

 

一、效果圖:首次進入某頁面git

  

拒絕受權後,再次進入該頁面或者點擊頁面某按鈕(獲取位置)綁定JS小程序

  

二、不知道有沒有細心的道友,發現上面2個彈出框的結構是同樣的,前者使用的是wx.getLocation接口自帶的樣式,後者使用的wx.showModel接口帶的樣式api

三、廢話很少說,簡單講一下原理:首次進入該頁面,onload或者onshow調用wx.getLocation要求用戶進行受權;用戶拒絕後,再次進入該頁面,咱們經過wx.getSetting接口,返回用戶受權的狀況:微信

JS打印:=>  |||   console控制檯輸出:=>  this

而後,根據上面JS中,res.authSetting['scope.userLocation']的值與true比較,爲true就是受權了,false就是拒絕受權了。spa

咱們這裏考慮的是拒絕受權,再調用wx.openSetting接口,請求再次受權,返回受權結果處理數據和業務。over,就是這麼EASY!debug

四、我這裏只打印出了userInfo和userLocation的接口返回信息,固然你還能夠打印其餘的信息,只要你以前調用過這些微信API,詳見微信的scope表:https://mp.weixin.qq.com/debug/wxadoc/dev/api/authorize-index.htmlcode

五、詳情代碼:component

//地圖功能單獨拿出來 -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);
        }
      }
    })
     } 


})
相關文章
相關標籤/搜索