在做小程式開發的時候,我們經常會需要獲取使用者的一些許可權。比如獲取使用者資訊用於直接登入,獲取地理位置用於定位等。但要是使用者拒絕授權了,該怎麼處理呢?
問題分析
在小程式裡面,獲取到使用者許可權是進行某些操作的必要前提。比如在進入小程式的時候,獲取到使用者資訊,拿到 unionId 對應到自己平臺的賬號進行登入,免去使用者自己輸入賬號密碼,這就是一個不錯的體驗。
當我們呼叫 wx.getUserInfo 或者 wx.getLocation 這種需要使用者授權的 API 時,小程式會彈框讓使用者選擇授權:
當使用者選擇允許後,下次再進入小程式就不會再詢問了,直接獲得使用者授權(除非將小程式刪了再進入)。這裡的問題在於,當使用者點了拒絕之後,就拿不到相關授權了,並且在一段時間內,進入小程式都不會再出現這個彈框。
從使用者體驗及保護隱私的角度考慮,小程式最好是不用授權也可以使用(或者體驗)。但有些型別的小程式確實是需要拿到使用者資訊才能使用的。這裡提供一個簡單的解決方案。
解決方案
以獲取使用者資訊直接登入為例。增加一個授權頁面,作為進入小程式的第一個頁面,在這裡獲取使用者資料和登入。預設可以什麼都不顯示,也可以當做引導頁來使用。
獲取使用者資訊需要用到 wx.login 和 wx.getUserInfo 兩個 API,關於這兩個 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
})
}
})
}
})
}複製程式碼
當上面程式碼走到了 fail 裡面,就可以認為在獲取授權的時候,使用者點了拒絕。當 getUserInfoFail 為 true 的時候,可以展示一個獲取授權的按鈕,比如像這樣:
接下來介紹另一個 API : wx.openSetting,使用 wx.openSetting 可以跳轉到小程式的授權設定介面,在安卓裡面它長這樣:
在點選授權按鈕後跳轉到這裡,讓使用者授權了才給進入首頁,否則就停留在授權頁面。
但還有個小問題,這個 API 是基礎庫 1.1.0 才有的,所以需要做相容處理:
所以,最終跳轉授權的程式碼如下:
//跳轉設定頁面授權
openSetting: function () {
var that = this
if (wx.openSetting) {
wx.openSetting({
success: function (res) {
//嘗試再次登入
that.login()
}
})
} else {
wx.showModal({
title: '授權提示',
content: '小程式需要您的微信授權才能使用哦~ 錯過授權頁面的處理方法:刪除小程式->重新搜尋進入->點選授權按鈕'
})
}
}複製程式碼
還好 1.1.0 已結算是比較早的版本了,現在都出到 1.3.0 了。
最終效果如下:
同樣的處理方式也可以用在獲取別的許可權上,妥妥的。