关于小程序授权地理位置(wx.getLocation + 用户体验)

wx.getLocation 如果用户曾点击过一次 “确认授权” , 

那么再次调用该接口时将不会出现弹出框(可以直接拿到经纬度)

关于用户体验:

  在 onLoad 中判断:

    如果用户之前“没有触发过“授权地理位置事件,则发起请求授权-----> 如果同意授权,直接拿到经纬度处理逻辑;

                                  如果不同意,则弹出自定义模态框进行提示,如果用户同意就打开setting页面;如果还不同意,就行默认事件(用户不授权的逻辑)

wx.getSetting({
        success: function(res){
          if (typeof (res.authSetting['scope.userLocation']) == "undefined") { // 从未触发过授权的情况
            wx.getLocation({ // 用户同意授权地理位置
              success: function (res) {
                that.setData({
                  latitude: res.latitude,
                  longitude: res.longitude
                });
                that.getShopInfo_nearby(res.latitude, res.longitude);
              },
              fail: function (err) { // 用户拒绝授权地理位置
                wx.showModal({//弹出模态框,询问
                  title: '是否授权当前位置',
                  content: '如需正常使用本程序,请按确定并在授权管理中选中“地理位置”,然后点按返回即可正常使用。',
                  cancelColor: '#f00',
                  success: function (res) {
                    if (res.confirm) {//同意授权
                      wx.openSetting({})
                    } else if (res.cancel) {//不同意授权,进行普通查询
                      mac = '08:D8:33:7C:5E:5';
                      that.getShopInfo(mac);
                    }
                  }
                })
              }
            })
          }
        }
      })

在 onShow 中:先检查用户授权状态,如果“曾经触发过“地理位置授权事件,但没有确认授权,就弹出自定义模态框进行询问(同意->setting页面; 不同意-> 走不同意的逻辑);

                 如果授权过了,则直接使用wx.getLocation 获取经纬度拿到经纬度处理逻辑(此时不会再触发弹框)

wx.getSetting({//检测用户权限
          success: (res) => {
            if (res.authSetting['scope.userLocation'] == false) { // 地理位置授权 触发过但没有授权
              wx.showModal({//弹出模态框,询问
                title: '是否授权当前位置',
                content: '如需正常使用紫燕到家设备,请按确定并在授权管理中选中“地理位置”,然后点按返回即可正常使用。',
                cancelColor: '#f00',
                success: function (res) {
                  if (res.confirm) {//同意授权
                    wx.openSetting({})
                  } else if (res.cancel) {//不同意授权,进行普通查询
                    mac = '08:D8:33:7C:5E:5';
                    that.getShopInfo(mac);
                  }
                }
              })
            } else if (res.authSetting['scope.userLocation'] == true){ // 地理位置授权过了
              wx.getLocation({
                success: function(res) {
                  that.getShopInfo_nearby(res.latitude, res.longitude);
                },
              })
            }
          }
        })

1

原文地址:https://www.cnblogs.com/Skate0rDie/p/11452674.html