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

更新日期: 2020-10-27 阅读次数: 3690 字数: 481 分类: 微信小程序

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

方法一

在 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

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式

谈笑风生

哈尼露呀_张三

来咨询一个问题,我的微信小程序使用了为位置服务,ios上可以正常显示地图,android显示空白。在真机调试上可以显示,体验版和正式版就是空白。
请问遇到过类似问题么?怎么排查解决

大象腿

如果是从后台拉取的地址位置坐标,确认接口服务器域名加到可信域名了么