success 已正常处理 hide_最新微信小程序授权的详细处理思路(一)
小程序的部分接口需要經過用戶授權同意才能調用。授權功能實現,是一個不可回避,又有點扯不清的話題,這里我們做一個詳細深入的分析。
最新的小程序各種授權,按使用范圍分成了多個scope,詳細的scope,可以參看小程序官方文檔,這里我們就不贅訴了。地址如下:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html
其中,scope.userInfo 用戶信息授權,用法比較特殊,我們下一節再作講解。
我這里先把scope.userInfo之外的其他授權方法基本一致的做一個詳細的探討。
詳細完成授權步驟如下:
一、使用[wx.openSetting]獲取授權狀態
官方文檔:https://developers.weixin.qq.com/miniprogram/dev/api/wx.getSetting.html
官方示例:
wx.getSetting({ success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } })注意:
上面示例官方并沒有詳細講解,返回的res.authSetting中,每一個具體的scope授權,其實并不是true和false那么簡單。
返回的詳細結果可能如下:
甚至可能是這樣的:
{ errMsg:"getSetting:ok", authSetting:{} }除了errMsg信息外,我們關注的重點是在authSetting中去取我們想要的值,但是,我們發現,可能我們想要的結果并沒有在里面,所以這里就是我們處理授權的關鍵了。
所以,在判斷是否授權的這一步中,我們要做的工作如下:
再判斷是true還是false。
這一步中:
scope為空,表示授權狀態為初始狀態,此時,可調起自動彈窗,讓用戶授權;scope為trues,表示用戶已授權,如為falses,則表示用戶拒絕了授權。而小程序授權功能的核心邏輯是這樣的,重點的重點:
小程序在第一次調起授權之后(自動彈窗),如果用戶拒絕了授權,也就是上面返回的結果為false的話,我們想要重新再調起(自動彈窗),需要用戶自己手動刪除程序,或者是退出小程序,等待一段時間再進去才能再次調起授權(自動彈窗),這種方式,明顯是一種不可取的用戶體驗極差的方法。幸好,官方有一個用戶可以設置所有授權的頁面,也就是wx.openSetting接口。
該功能如下圖:
所以,到這里明白了整個授權的邏輯后,該怎么實現完整的授權功能,我們心里就有數了。
二、使用 wx.openSetting 配合完成授權
實現授權功能的邏輯如下:
- 使用[wx.openSetting]獲取授權狀態
- 結果為空 --- 使用 wx.authorize彈出授權
- 結果為false -- 彈窗進行說明,引導用戶到權限設置頁面(彈窗可使用wx.showModal,去設置頁使用wx.openSetting)
- 結果為true -- 用戶已授權,正常進行自己的業務邏輯即可。
三、完整實例代碼:
這里以位置授權為例:
//在地圖位置選擇 chooseLocation(){ const that = this wx.getSetting({ success(res){ console.log(res) console.log(res.authSetting['scope.userLocation']) if(res.authSetting['scope.userLocation'] ===''){ wx.authorize({ scope: 'scope.userLocation', success() { //調用地圖的查詢位置功能 //doSomeThing() } }) }else if(res.authSetting['scope.userLocation'] === false){ wx.showModal({ title: '提示', content: '需要允許使用地理位置權限,請點擊“確定”去授權后再使用位置。', success(res) { if (res.confirm) { console.log('用戶點擊確定') wx.openSetting({ success(res) { console.log(res.authSetting) } }) } else if (res.cancel) { console.log('用戶點擊取消') } } }) }else{ //調用地圖的查詢位置功能 //doSomeThing() } } }) },最后,提醒一下,最新的位置授權,需要在app.json中的permission節點做用途聲明,代碼如下:
{ "pages":[ …… ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle":"black", "navigationStyle": "default" }, "tabBar": { …… }, "permission": { "scope.userLocation": { "desc": "你的位置信息將用于導航線路展示" } } }官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/config.html#permission
總結
以上是生活随笔為你收集整理的success 已正常处理 hide_最新微信小程序授权的详细处理思路(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql io_MySQL服务器 IO
- 下一篇: mysql 字符列做日期分区_mysql