背景:微信小程序很多都需要用戶的微信授權(quán),可是很多瓜皮用戶會(huì)狠心拒絕,但是不管用戶怎么操作,我們必須讓用戶能夠更好的體驗(yàn)小程序。
過程:我把用戶的操作分四種。
1)用戶直接同意授權(quán)。
2)用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶繼續(xù)拒絕授權(quán)。
3)用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶點(diǎn)擊授權(quán),進(jìn)入授權(quán)設(shè)置頁(yè),用戶點(diǎn)擊授權(quán)。
4)用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶點(diǎn)擊授權(quán),進(jìn)入授權(quán)設(shè)置頁(yè),用戶不點(diǎn)擊授權(quán),直接退出。
解決方法:
-
toMap() {
-
let that = this;
-
wx.getSetting({
-
success(res) {
-
if (!res.authSetting['scope.userLocation']) {//如果沒有授權(quán)
-
wx.authorize({
-
scope: 'scope.userLocation',
-
success: res => {//第一種情況:用戶同意授權(quán)
-
// 發(fā)送地圖
-
that.toMapFin();
-
}, fail: res => {//用戶點(diǎn)擊了取消授權(quán),引導(dǎo)其去授權(quán)
-
wx.showModal({
-
title: '提示',
-
content: '定位需要您的微信授權(quán)才能使用哦~ 錯(cuò)過授權(quán)頁(yè)面的處理方法:刪除小程序->重新搜索五百?gòu)?qiáng)名片進(jìn)入->點(diǎn)擊授權(quán)按鈕',
-
cancelText: "不授權(quán)",
-
confirmText: "授權(quán)",
-
confirmColor: "#a08250",
-
success: function (res) {
-
if (res.confirm) {
-
// 這個(gè) API 是基礎(chǔ)庫(kù) 1.1.0 才有的,所以需要做兼容處理:
-
if (wx.openSetting) {
-
wx.openSetting({
-
success: function (res) {//第三種情況:用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶點(diǎn)擊授權(quán),進(jìn)入授權(quán)設(shè)置頁(yè),用戶點(diǎn)擊授權(quán)。
-
that.toMapFin();
-
}
-
})
-
} else {
-
wx.showModal({
-
title: '授權(quán)提示',
-
content: '定位需要您的微信授權(quán)才能使用哦~ 錯(cuò)過授權(quán)頁(yè)面的處理方法:刪除小程序->重新搜索五百?gòu)?qiáng)名片進(jìn)入->點(diǎn)擊授權(quán)按鈕'
-
})
-
}
-
} else if (res.cancel) {//第二種情況:用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶繼續(xù)拒絕授權(quán)。
-
wx.showModal({
-
title: '提示',
-
content: '定位失敗,錯(cuò)過授權(quán)頁(yè)面的處理方法:刪除小程序->重新搜索五百?gòu)?qiáng)名片進(jìn)入->點(diǎn)擊授權(quán)按鈕',
-
showCancel: false,
-
confirmColor: "#c00",
-
success: function (res) {
-
if (res.confirm) {
-
console.log('用戶點(diǎn)擊確定')
-
}
-
}
-
})
-
}
-
}
-
})
-
}
-
})
-
} else {//用戶原來已經(jīng)通過了授權(quán),不必重新調(diào)起授權(quán)界面。
-
that.toMapFin();
-
}
-
}
-
})
-
-
},
-
toMapFin(){
-
wx.chooseLocation({
-
success: res => {
-
console.log(res)
-
let address = res.address + res.name;
-
this.setData({
-
"local.address": [address],
-
"local.longitude": res.longitude,
-
"local.latitude": res.latitude
-
})
-
},
-
fail: res => { //第四種情況:用戶拒絕授權(quán),進(jìn)入引導(dǎo)彈窗,用戶點(diǎn)擊授權(quán),進(jìn)入授權(quán)設(shè)置頁(yè),用戶不點(diǎn)擊授權(quán),直接退出。
-
wx.showModal({
-
title: '提示',
-
content: '定位失敗',
-
showCancel: false,
-
confirmColor: "#c00",
-
success: function (res) { }
-
})
-
}
-
})
-
},
這樣做的話,每次用戶進(jìn)來都會(huì)查看他是否已經(jīng)授權(quán),如果不授權(quán)的話,都會(huì)調(diào)起授權(quán)提示。
如果是用戶點(diǎn)擊拒絕授權(quán)之后,以后每次進(jìn)來都再也不調(diào)起授權(quán)提示的話,這個(gè)方法就不適合了。
需要用到的方法:
wx:getSetting(獲取用戶的當(dāng)前設(shè)置。)
wx.authorize(提前向用戶發(fā)起授權(quán)請(qǐng)求。調(diào)用后會(huì)立刻彈窗詢問用戶是否同意授權(quán)小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù),但不會(huì)實(shí)際調(diào)用對(duì)應(yīng)接口。如果用戶之前已經(jīng)同意授權(quán),則不會(huì)出現(xiàn)彈窗,直接返回成功。)
wx.openSetting(調(diào)起客戶端小程序設(shè)置界面,返回用戶設(shè)置的操作結(jié)果。)
|