收藏
回答

wx.getLocation 问题(点击 允许 执行的也是 fail)

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx.getLocation 工具 6.5.3 2.00

- 当前 Bug 的表现(可附上截图)


  1. getSetting 得到的 ['scope.userlocaion'] 为 undefined 或 true

  2. 然后执行 wx.getLocation 弹窗

  3. 点击允许(理想情况应该是执行 success)


 但是执行的是 fail ,一开始还以为自己获取的 ['scope.userlocaion']  不对,但是前面已经判断过值为 true 或 undefined 才会执行  wx.getLocation,既然弹窗就说明是 undefined 值,然后点击 允许,按理就应该执行 success 才对的。


然后去看了一下自己手机设置没有给微信获取地址。也就是说手机不给微信获取地址,即使用户给小程序获取地址,那么这个执行的也是 fail。

但是 wx.getLocation 只在值为 undefined 的之后弹窗继续执行,或者 true 的时候继续执行。 false 不再弹窗 更不能继续了。


那么我怎么区分 wx.getLocation 执行的 fail 的时候,是因为用户不允许小程序,还是用户手机不允许微信导致的?


然后 wx.getLocation 也不在弹窗了, fail 的时候,就莫名其妙了,用户点击允许但是你没有给我地址,

这时候如果再做个 wx.openSetting ,看起来合理,打开设置去设置授权,

但是如果用户点击 不允许,还跳出来就更莫名其妙了,都拒绝了,还叫我去授权?



看不懂这个逻辑,不知道怎么写了,好晕,


getLocation() {
  // 获取用户当前的授权状态。
  wx.getSetting({
    success: (res) => {
      // 用户是否授权地址
      let locationScope = res.authSetting['scope.userLocation']
      // 只能这样获取,不能res.authSetting.scope.userLocation  这样就是不存在的值 scope 报错
      // res.authSetting['scope.userLocation']  的可能是 true(已授权),false(拒绝过授权),undefined(还没有操作过)
      // true 与 false 不会再弹窗,undefined 会弹窗
      if (locationScope == undefined || locationScope == true) {
        this.getLocationApi()
      } else {
        // 就是 false 之前拒绝过不会弹窗了,要开发者自己加上弹窗,如果用户一直拒绝,自己还加上去会不好吧?
        /* wx.showModal({
          title: '是否授权地理位置',
          content: `您的位置信息将用于收货地址填写与展示`,
          cancelText: '不允许',
          confirmText: '允许',
          success(res) {
            if (res.confirm) {
              console.log('用户点击确定')
            } else if (res.cancel) {
              console.log('用户点击取消')
            }
          }
        }) */
      }
    }
  })
},
getLocationApi() {
  //wx.getLocation ,如果还没有操作过的话,会弹出窗口让用户允许或者允许才会执行
  wx.getLocation({
    type: 'wgs84',
    success: (res) => {
      // 用户允许授权,并且获取定位成功
      //2、根据坐标获取当前位置名称,显示在顶部:腾讯地图逆地址解析
      qqmapsdk.reverseGeocoder({
        location: {
          latitude: res.latitude,
          longitude: res.longitude
        },
        success: (addressRes) => {
          console.log(addressRes, 'addressRes')
          console.log('888888')
          let address = addressRes.result.formatted_addresses.recommend;
          console.log(address)
          this.setData({
            currentAddr: address
          })
        }
      })
      //console.log(res, 'success')
    },
    fail: (res) => {
      // 用户不允许授权

      // 用户允许授权,但是调用接口失败,没有定位成功(手机设备不允许微信获取地址)

     // 这里就很奇怪了,点击允许,但是给的却是 fail,再次提示去授权?但是如果是 点击不允许授权的话,再提示授权不是耍流氓么?

      //res={errmsg:"getLocation:fail auth deny"}
      wx.showToast({
        title: '获取定位失败',
        image:'../../img/warn.png'
      })
    }
  })
},


最后一次编辑于  03-24  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

2 个回答

  • 吴奕群
    吴奕群
    03-24

    手机有开启定位功能吗?

    03-24
    赞同
    回复 2
    • 유미
      유미
      03-24

      没有开启?我想问的是,如果手机没有开启,但是用户点击允许了,却没有获取到地址,

      貌似判断不了是 点击了不允许 fai 的还是 点击了允许但是手机不允许把?

      03-24
      回复
    • 我愿化身石桥 (^o^)
      我愿化身石桥 (^o^)
      04-29

      错误信息不完整!我也是手机没有开启定位,使用  `wx.openLocation` 的时候,会提示手机没有开启定位权限

      04-29
      回复
  • 子凯
    子凯
    07-04

    这个问题有解决吗?

    07-04
    赞同
    回复