返回

致程序员的一封信:小程序地图开发踩坑指南

见解分享

小程序定位授权踩坑及解决办法

导语:
小程序开发中,使用 wx.getLocation 获取用户位置信息时,经常会遇到授权失败的问题,这篇文章将详细介绍踩坑原因及解决办法。

踩坑原因:
小程序直接通过账号密码登录,没有经过用户授权,因此无法使用需要用户授权的 wx.getLocation 接口。

解决办法:

  1. app.js 中调用 wx.login 获取 code
wx.login({
  success: res => {
    // 将 code 发送到后台换取 openId
    wx.request({
      url: 'https://example.com/api/login',
      method: 'POST',
      data: {
        code: res.code
      },
      success: res => {
        // 将 openId 存储到本地
        wx.setStorageSync('openid', res.data.openid)
      }
    })
  }
})
  1. 在需要获取位置的页面调用 wx.getLocation
wx.getLocation({
  type: 'gcj02', // 默认为 `wgs84`
  success: res => {
    // 将经纬度发送到后台
    wx.request({
      url: 'https://example.com/api/location',
      method: 'POST',
      data: {
        latitude: res.latitude,
        longitude: res.longitude
      }
    })
  },
  fail: res => {
    // 授权失败
    wx.showModal({
      title: '提示',
      content: '请授权使用您的位置信息',
      success: res => {
        if (res.confirm) {
          // 再次调用 `wx.getLocation`
          wx.getLocation({
            type: 'gcj02',
            success: res => {
              // 将经纬度发送到后台
              wx.request({
                url: 'https://example.com/api/location',
                method: 'POST',
                data: {
                  latitude: res.latitude,
                  longitude: res.longitude
                }
              })
            }
          })
        }
      }
    })
  }
})

常见问题解答:

  1. 为什么 wx.getLocation 一直失败?
    可能是因为小程序没有经过用户授权。

  2. 如何解决 wx.getLocation 授权失败的问题?
    通过调用 wx.login 获取 code,然后发送到后台换取 openid,再在需要获取位置的页面调用 wx.getLocation

  3. 我按照步骤做了,还是不行?
    检查代码是否正确,并且确保小程序后台能够正确处理 codeopenid

  4. 有没有其他方法可以获取用户位置信息?
    没有,wx.getLocation 是小程序唯一获取用户位置信息的接口。

  5. 小程序可以直接输入账号密码登录吗?
    可以,但是无法使用需要用户授权的接口。

结语:
通过获取用户授权,可以解决小程序 wx.getLocation 授权失败的问题,保证小程序定位功能的正常使用。