微信小程序没有授权时的处理方法

时间:2024-04-16 22:23:18

 背景:微信小程序很多都需要用户的微信授权,可是很多瓜皮用户会狠心拒绝,但是不管用户怎么操作,我们必须让用户能够更好的体验小程序。

过程:我把用户的操作分四种。

1)用户直接同意授权。
2)用户拒绝授权,进入引导弹窗,用户继续拒绝授权。
3)用户拒绝授权,进入引导弹窗,用户点击授权,进入授权设置页,用户点击授权。
4)用户拒绝授权,进入引导弹窗,用户点击授权,进入授权设置页,用户不点击授权,直接退出。

解决方法:

  toMap() {
    let that = this;
    wx.getSetting({
      success(res) {
        if (!res.authSetting[\'scope.userLocation\']) {//如果没有授权
          wx.authorize({
            scope: \'scope.userLocation\',
            success: res => {//第一种情况:用户同意授权
              // 发送地图
              that.toMapFin();
            }, fail: res => {//用户点击了取消授权,引导其去授权
              wx.showModal({
                title: \'提示\',
                content: \'定位需要您的微信授权才能使用哦~ 错过授权页面的处理方法:删除小程序->重新搜索进入->点击授权按钮\',
                cancelText: "不授权",
                confirmText: "授权",
                confirmColor: "#a08250",
                success: function (res) {
                  if (res.confirm) {
                    // 这个 API 是基础库 1.1.0 才有的,所以需要做兼容处理:
                    if (wx.openSetting) {
                      wx.openSetting({
                        success: function (res) {//第三种情况:用户拒绝授权,进入引导弹窗,用户点击授权,进入授权设置页,用户点击授权。 
                          that.toMapFin();
                        }
                      })
                    } else {
                      wx.showModal({
                        title: \'授权提示\',
                        content: \'定位需要您的微信授权才能使用哦~ 错过授权页面的处理方法:删除小程序->重新搜索进入->点击授权按钮\'
                      })
                    }
                  } else if (res.cancel) {//第二种情况:用户拒绝授权,进入引导弹窗,用户继续拒绝授权。
                    wx.showModal({
                      title: \'提示\',
                      content: \'定位失败,错过授权页面的处理方法:删除小程序->重新搜索进入->点击授权按钮\',
                      showCancel: false,
                      confirmColor: "#c00",
                      success: function (res) {
                        if (res.confirm) {
                          console.log(\'用户点击确定\')
                        }
                      }
                    })
                  }
                }
              })
            }
          })
        } else {//用户原来已经通过了授权,不必重新调起授权界面。
          that.toMapFin();
        }
      }
    })

  },
  toMapFin(){
    wx.chooseLocation({
      success: res => {
        console.log(res)
        let address = res.address + res.name;
        this.setData({
          "local.address": [address],
          "local.longitude": res.longitude,
          "local.latitude": res.latitude
        })
      },
      fail: res => { //第四种情况:用户拒绝授权,进入引导弹窗,用户点击授权,进入授权设置页,用户不点击授权,直接退出。
        wx.showModal({
          title: \'提示\',
          content: \'定位失败\',
          showCancel: false,
          confirmColor: "#c00",
          success: function (res) { }
        })
      }
    })
  }

这样做的话,每次用户进来都会查看他是否已经授权,如果不授权的话,都会调起授权提示。

如果是用户点击拒绝授权之后,以后每次进来都再也不调起授权提示的话,这个方法就不适合了。

需要用到的方法:

wx:getSetting(获取用户的当前设置。)

wx.authorize(提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。)

wx.openSetting(调起客户端小程序设置界面,返回用户设置的操作结果。)