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


問題:

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

查看官方文檔:

授權

部分接口需要經過用戶授權同意才能調用。我們把這些接口按使用范圍分成多個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