乐趣区

小程序位置授权处理

这两天在做小程序调取地图的时候遇到一个问题,如果用户第一次拒绝了位置权限请求。那么就不会再次唤起授权弹出。需要我们引导用户去开启。

具体做法如下。
aap.json 中加入授权配置

"permission": {
    "scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}
  }

在 page 页面中使用,需要有几个注意的地方,初次使用的时候,去申请权限。这里我是放在 onShow 方法里面。

 onShow: function () {
    // 初始获取定位权限
    wx.authorize({
      scope: 'scope.userLocation',
      success: (res) => {},})
  },

然后在调用地图地位。或者获取用户权限的函数去判断是否有定位权限,如果没有那么引导用户开启权限。
如下:我有一个 Input 去触发选择地图事件。

<input bindfocus="openMap" value='{{address}}'  placeholder="点击选择详细地址"></input>

事件处理

 openMap:function(e){
    var that = this
    wx.getSetting({success(res){
        // 这里判断是否有地位权限
          if (!res.authSetting['scope.userLocation']) {
            wx.showModal({
              title: '提示',
              content: '请求获取位置权限',
              success:function(res){if(res.confirm==false){return false;}
                wx.openSetting({success(res) {
                    // 如果再次拒绝则返回页面并提示
                    if (!res.authSetting['scope.userLocation']) {
                      wx.showToast({
                        title: '此功能需获取位置信息,请重新设置',
                        duration: 3000,
                        icon: 'none'
                      })
                    } else {
                      // 允许授权,调用地图
                      that.chooseMap()}
                  }
                })
              }
            }) 
          } else {
          // 如果有定位权限,调用地图
            that.chooseMap()}

        }
      
    })
  },
  
    chooseMap(){
    var that = this
    wx.chooseLocation({success: function (res) {
        that.setData({
          address: res.address,
          latitude: res.latitude,
          longitude: res.longitude
        })
      },
      fail: function (res) {console.log(res)
      }
    })
  },

原文地址

退出移动版