小程序地理位置授权失败检测,并引导开启

发布时间: 2020-10-27 14:38:48 作者: 大象笔记

在涉及到用户位置的小程序里,如果用户拒绝授权,就无法拿到起当前的坐标,也就无法进行下一步的操作。所以,需要检测用户是否拒绝授权,并引导其开启。

方法一

在 wx.getLocation 失败回调里,通过 wx.getSetting 来判断是否授权了地理位置,如果没有,通过 wx.openSetting 来让用户再次手动授权。

方法二

在 wx.getLocation 失败回调里,通过 err msg 来判断是否禁用了授权。然后同样适用 wx.openSetting 来引导再次授权。但是,这里存在一个问题,即不同平台 err msg 不一致,这样做并不严谨。

wx.getSetting

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html

wx.getSetting(Object object)

获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。

wx.openSetting

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html

wx.openSetting(Object object)

调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。

success 回调返回用户授权的结果。

注意:2.3.0 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息。所以,需要使用 modal 弹窗来解决此问题。

示例代码

wx.getLocation({
  type: 'gcj02',
  success: res => {
    this.setData({
      lat: res.latitude.toString(),
      lng: res.longitude.toString(),
    })
  },
  complete: () => {
    // 未授权情况
    var that = this;
    if (!this.data.lng) {
      wx.getSetting({
        success (res) {
          if (!res.authSetting["scope.userLocation"]) {
            // 2.3.0 版本开始,用户发生点击行为后,
            // 才可以跳转打开设置页,管理授权信息。
            wx.showModal({
              title: '提示',
              content: '请开启位置授权,否则将无法使用XX功能',
              confirmText: "去开启",
              cancelText: "取消",
              success: res => {
                if (res.confirm) {
                  wx.openSetting({
                    success (res) {
                      that.onShow();
                    }
                  })
                }
              }
            }) // end of wx.showModal
          }
        }
      })
      return;
    }

    // 已授权情况
    // TODO
  }
});

参考

https://www.jianshu.com/p/80e33d16182f

我是一名山东烟台的开发者,联系作者