用户拒绝授权小程序使用通讯地址API的问题和解决方法
发布于 5 年前 作者 ming14 1496 次浏览 来自 分享

小程序中正确使用通讯地址这个开发接口的流程:

思路:

  • 1 调用 wx.getSetting() 获取用户的授权状态,状态有三种:res.authSetting[‘scope.address’]
  • 1.1 undefined 第一次点击按钮,获取权限,直接调用 wx.chooseAddress() 即可
  • 1.2 true 第二次点击按钮,说明用户已经授权过,直接调用 wx.chooseAddress() 即可
  • 1.3 false 第二次点击按钮,说明用户上一次拒绝了授权,此时,应该调用 wx.showModal() 弹出对话框
      告诉用户已经拒绝过授权了,应该点击确定再次同意授权后,才能选择收获地址
      1.3.1 在确定中,调用 wx.openSetting() 打开设置界面
      1.3.2 点击 <(返回)按钮后,根据返回值来确定用户是否开启授权
      1.3.3 开启了,就说明用户同意授权,直接调用 wx.chooseAddress() 即可
      1.3.4 没有开启,直接返回原来的页面即可
wx.getSetting({
      success(res) {
        // 1 如果 res.authSetting 对象为空,说明小程序还没有向用户请求过权限
        if (res.authSetting['scope.address'] === undefined) {
          console.log('用户第一点击按钮,小程序还没有请求过通讯地址')
          // 此时,应该向用户请求 通讯地址 权限
          wx.chooseAddress({
            success(res) {
              // 成功授权:
              console.log('success', res)
            },
            fail(err) {
              // 用户拒绝授权
              // console.log('fail:', err)
            }
          })
        } else if (res.authSetting['scope.address'] === true) {
          // 说明用户已经授权过了,此时,只需要再次打开收获地址界面,让用户选择收获地址即可
          wx.chooseAddress({
            success(res) {
              console.log('success', res)
            },
            fail(err) {
              // console.log('fail:', err)
            }
          })
        } else if (res.authSetting['scope.address'] === false) {
          // 说明小程序已经向用户请求过授权了,但是,用户拒绝了
          // 当用户第二次点击按钮的时候,就会执行这个逻辑
          wx.showModal({
            title: '温馨提示',
            content: '您需要授权后,才能使用收获地址功能,是否重新授权',
            confirmColor: '#ff2d4a',
            success(res) {
              if (res.confirm) {
                // 如果用户点了确定,就打开 设置 界面
                wx.openSetting({
                  success(res) {
                    // 不管是否开启授权,都执行success
                    // 应该根据 res['scope.address'] 是 true 或 false 来确定用户是否同意授权
                    console.log('设置success:', res.authSetting)
                    if (res.authSetting['scope.address'] === true) {
                      // 直接打开收获地址选择界面,让用户选择收获地址
                      wx.chooseAddress({
                        success(res) {
                          console.log('success', res)
                        },
                        fail(err) {
                          // console.log('fail:', err)
                        }
                      })
                    }
                  },
                  fail(err) {
                    console.log('设置fail:', err)
                  }
                })
                console.log('用户点击确定')
              } else if (res.cancel) {
                // 用户点击取消,不需要做任何处理
                // console.log('用户点击取消')
              }
            }
          })
        }

        console.log('授权状态:', res)
      }
    })
回到顶部