微信小程序拒絕授權后重新拉起授權窗口


問題:

在首次進入小程序時,我們常常會收到一些獲取權限的申請,比如「獲取地理位置權限」、需要微信登錄時請求「獲得你的公開信息(昵稱、頭像等)」。對於這些權限申請,開發者當然希望獲得所有權限,而用戶拒絕授權的情況不免存在。那么作為開發人員在考慮「用戶拒絕授權」這類異常情況出現時,應該提前做好未獲得授權時的兼容處理,以及用戶希望授權時的再次提醒。

查看官方文檔:

授權

部分接口需要經過用戶授權同意才能調用。我們把這些接口按使用范圍分成多個scope,用戶選擇對 scope來進行授權,當授權給一個scope之后,其對應的所有接口都可以直接使用。此類接口調用時:

  • 如果用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊同意后方可調用接口;
  • 如果用戶已授權,可以直接調用接口;
  • 如果用戶已拒絕授權,則不會出現彈窗,而是直接進入接口 fail 回調。請開發者兼容用戶拒絕授權的場景。

......

授權有效期

一旦用戶明確同意或拒絕過授權,其授權關系會記錄在后台,直到用戶主動刪除小程序。

最佳實踐

在真正需要使用授權接口時,才向用戶發起授權申請,並在授權申請中說明清楚要使用該功能的理由。

分析:

官方文檔,並沒有給出明顯的說明和解決示例,但是我們還是可以通過上面這句話得到解決方式,當用戶拒絕授權后調用授權彈窗接口 wx.authorize,不會再次出現彈窗,但是會進入接口的fail回調,那我們就可以在fail回調里想辦法再次進行授權操作,肯定不能調用 wx.authorize,那應該怎么辦呢?通過查資料我們發現,微信小程序其實是有一個設置功能界面的,在設置界面里面我們可以對小程序進行再次授權。然而,通過官方文檔我們可以知道,有一個API可以實現打開設置界面的功能,就是wx.openSetting可以調起客戶端小程序設置界面,返回用戶設置的操作結果。但是設置界面只會出現小程序已經向用戶請求過的權限,我們可以按照這個思路解決問題。

示例代碼:

// 可以通過 wx.getSetting 先查詢一下用戶是否授權了 "scope.record" 這個 scope
    wx.getSetting({
      success(res) {
        console.log(!res.authSetting['scope.userLocation']);
        if (!res.authSetting['scope.userLocation']) {
          wx.authorize({
            scope: 'scope.userLocation',
            success() {
              // 用戶已經同意
              //其他操作...
              console.log("用戶已經同意位置授權");
            },
            fail(){
              console.log("用戶已經拒絕位置授權");
              that.openConfirm();//如果拒絕,在這里進行再次獲取授權的操作
            }
          })
        }
       //其他操作..
      }
    });

//再次獲取授權
//當用戶第一次拒絕后再次請求授權
  openConfirm: function () {
    wx.showModal({
      content: '檢測到您沒打開此小程序的定位權限,是否去設置打開?',
      confirmText: "確認",
      cancelText: "取消",
      success: function (res) {
        console.log(res);
        //點擊“確認”時打開設置頁面
        if (res.confirm) {
          console.log('用戶點擊確認')
          wx.openSetting({
            success: (res) => { }
          })
        } else {
          console.log('用戶點擊取消')
        }
      }
    });
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM