在做小程序開發(fā)的時候管削,我們經(jīng)常會需要獲取用戶的一些權(quán)限。比如獲取用戶信息用于直接登錄撑螺,獲取地理位置用于定位等含思。但要是用戶拒絕授權(quán)了,該怎么處理呢实蓬?
問題分析
在小程序里面茸俭,獲取到用戶權(quán)限是進(jìn)行某些操作的必要前提吊履。比如在進(jìn)入小程序的時候,獲取到用戶信息调鬓,拿到 unionId 對應(yīng)到自己平臺的賬號進(jìn)行登錄艇炎,免去用戶自己輸入賬號密碼,這就是一個不錯的體驗腾窝。
當(dāng)我們調(diào)用 wx.getUserInfo 或者 wx.getLocation 這種需要用戶授權(quán)的 API 時缀踪,小程序會彈框讓用戶選擇授權(quán):
當(dāng)用戶選擇允許后,下次再進(jìn)入小程序就不會再詢問了虹脯,直接獲得用戶授權(quán)(除非將小程序刪了再進(jìn)入)驴娃。這里的問題在于,當(dāng)用戶點了拒絕之后循集,就拿不到相關(guān)授權(quán)了唇敞,并且在一段時間內(nèi),進(jìn)入小程序都不會再出現(xiàn)這個彈框咒彤。
從用戶體驗及保護(hù)隱私的角度考慮疆柔,小程序最好是不用授權(quán)也可以使用(或者體驗)。但有些類型的小程序確實是需要拿到用戶信息才能使用的镶柱。這里提供一個簡單的解決方案旷档。
解決方案
以獲取用戶信息直接登錄為例。增加一個授權(quán)頁面歇拆,作為進(jìn)入小程序的第一個頁面鞋屈,在這里獲取用戶數(shù)據(jù)和登錄。默認(rèn)可以什么都不顯示故觅,也可以當(dāng)做引導(dǎo)頁來使用厂庇。
獲取用戶信息需要用到 wx.login 和 wx.getUserInfo 兩個 API,關(guān)于這兩個 API 的具體信息大家可以到官方文檔去查看逻卖。
增加一個登陸方法宋列,代碼如下:
//登錄
login: function () {
var that = this
if (typeof success == "function") {
this.data.getUserInfoSuccess = success
}
wx.login({
success: function (res) {
var code = res.code;
wx.getUserInfo({
success: function (res) {
//平臺登錄
},
fail: function (res) {
that.setData({
getUserInfoFail: true
})
}
})
}
})
}
當(dāng)上面代碼走到了 fail 里面,就可以認(rèn)為在獲取授權(quán)的時候评也,用戶點了拒絕炼杖。當(dāng) getUserInfoFail 為 true 的時候,可以展示一個獲取授權(quán)的按鈕盗迟,比如像這樣:
接下來介紹另一個 API : wx.openSetting坤邪,使用 wx.openSetting 可以跳轉(zhuǎn)到小程序的授權(quán)設(shè)置界面,在安卓里面它長這樣:
在點擊授權(quán)按鈕后跳轉(zhuǎn)到這里罚缕,讓用戶授權(quán)了才給進(jìn)入首頁艇纺,否則就停留在授權(quán)頁面。
但還有個小問題,這個 API 是基礎(chǔ)庫 1.1.0 才有的黔衡,所以需要做兼容處理:
所以蚓聘,最終跳轉(zhuǎn)授權(quán)的代碼如下:
//跳轉(zhuǎn)設(shè)置頁面授權(quán)
openSetting: function () {
var that = this
if (wx.openSetting) {
wx.openSetting({
success: function (res) {
//嘗試再次登錄
that.login()
}
})
} else {
wx.showModal({
title: '授權(quán)提示',
content: '小程序需要您的微信授權(quán)才能使用哦~ 錯過授權(quán)頁面的處理方法:刪除小程序->重新搜索進(jìn)入->點擊授權(quán)按鈕'
})
}
}
還好 1.1.0 已結(jié)算是比較早的版本了,現(xiàn)在都出到 1.3.0 了盟劫。
最終效果如下:
同樣的處理方式也可以用在獲取別的權(quán)限上夜牡,妥妥的。