小程序沒有受權時的處理方法

在作小程序開發的時候,咱們常常會須要獲取用戶的一些權限。好比獲取用戶信息用於直接登陸,獲取地理位置用於定位等。但要是用戶拒絕受權了,該怎麼處理呢?javascript

問題分析

在小程序裏面,獲取到用戶權限是進行某些操做的必要前提。好比在進入小程序的時候,獲取到用戶信息,拿到 unionId 對應到本身平臺的帳號進行登陸,免去用戶本身輸入帳號密碼,這就是一個不錯的體驗。java

當咱們調用 wx.getUserInfo 或者 wx.getLocation 這種須要用戶受權的 API 時,小程序會彈框讓用戶選擇受權:小程序

當用戶選擇容許後,下次再進入小程序就不會再詢問了,直接得到用戶受權(除非將小程序刪了再進入)。這裏的問題在於,當用戶點了拒絕以後,就拿不到相關受權了,而且在一段時間內,進入小程序都不會再出現這個彈框。微信

從用戶體驗及保護隱私的角度考慮,小程序最好是不用受權也可使用(或者體驗)。但有些類型的小程序確實是須要拿到用戶信息才能使用的。這裏提供一個簡單的解決方案。this

解決方案

以獲取用戶信息直接登陸爲例。增長一個受權頁面,做爲進入小程序的第一個頁面,在這裏獲取用戶數據和登陸。默承認以什麼都不顯示,也能夠當作引導頁來使用。spa

獲取用戶信息須要用到 wx.login 和 wx.getUserInfo 兩個 API,關於這兩個 API 的具體信息你們能夠到官方文檔去查看。code

增長一個登錄方法,代碼以下:cdn

//登陸
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 的時候,能夠展現一個獲取受權的按鈕,好比像這樣:blog

接下來介紹另外一個 API : wx.openSetting,使用 wx.openSetting 能夠跳轉到小程序的受權設置界面,在安卓裏面它長這樣:ip

在點擊受權按鈕後跳轉到這裏,讓用戶受權了纔給進入首頁,不然就停留在受權頁面。

但還有個小問題,這個 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 了。

最終效果以下:

一樣的處理方式也能夠用在獲取別的權限上,妥妥的。

相關文章
相關標籤/搜索