解决:用户拒绝授权小程序使用通讯地址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)
      }
    })
  }
})

原文地址:https://www.cnblogs.com/vue-rr/p/10321764.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值