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