解决:用户拒绝授权小程序使用通讯地址API的问题

解决:用户拒绝授权小程序使用通讯地址API的问题

通讯地址等这些开发接口,都是由微信自身提供的能力。小程序中要使用这些开发接口, 必须经过用户授权后,才能使用。

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

/**
 * 思路:
 * 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 没有开启,直接返回原来的页面即可
 */

wxml为:

<!-- 收获地址完成整个(授权功能)-->
<button bindtap="getAddress">获取收货地址</button>

js文件为:

Page({
   // 1 获取收获地址
  getAddress () {
    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)
      }
    })
  }
})
posted @ 2019-01-25 21:34  唯有以  阅读(1556)  评论(0编辑  收藏  举报