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