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