解決:用戶拒絕授權小程序使用通訊地址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)
}
})
}
})